Commit 0402ca3c authored by Peter Maydell's avatar Peter Maydell
Browse files

Merge remote-tracking branch 'remotes/berrange/tags/qio-next-pull-request' into staging



# gpg: Signature made Thu 15 Feb 2018 17:50:22 GMT
# gpg:                using RSA key BE86EBB415104FDF
# gpg: Good signature from "Daniel P. Berrange <dan@berrange.com>"
# gpg:                 aka "Daniel P. Berrange <berrange@redhat.com>"
# Primary key fingerprint: DAF3 A6FD B26B 6291 2D0E  8E3F BE86 EBB4 1510 4FDF

* remotes/berrange/tags/qio-next-pull-request:
  allow to build with older sed
  io/channel-command: Do not kill the child process after closing the pipe
  io: Add /dev/fdset/ support to QIOChannelFile
  io: Don't call close multiple times in QIOChannelFile
  io: Fix QIOChannelFile when creating and opening read-write
  io/channel-websock: handle continuous reads without any data
  io: fix QIONetListener memory leak

Signed-off-by: default avatarPeter Maydell <peter.maydell@linaro.org>
parents 5e5432b7 6809df1d
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -256,8 +256,7 @@ GENERATED_FILES += $(KEYCODEMAP_FILES)

ui/input-keymap-%.c: $(KEYCODEMAP_GEN) $(KEYCODEMAP_CSV) $(SRC_PATH)/ui/Makefile.objs
	$(call quiet-command,\
	    src=$$(echo $@ | sed -E -e "s,^ui/input-keymap-(.+)-to-(.+)\.c$$,\1,") && \
	    dst=$$(echo $@ | sed -E -e "s,^ui/input-keymap-(.+)-to-(.+)\.c$$,\2,") && \
	    stem=$* && src=$${stem%-to-*} dst=$${stem#*-to-} && \
	    test -e $(KEYCODEMAP_GEN) && \
	    $(PYTHON) $(KEYCODEMAP_GEN) \
	          --lang glib2 \
+1 −1
Original line number Diff line number Diff line
@@ -73,7 +73,7 @@ qio_channel_file_new_fd(int fd);
 * qio_channel_file_new_path:
 * @path: the file path
 * @flags: the open flags (O_RDONLY|O_WRONLY|O_RDWR, etc)
 * @mode: the file creation mode if O_WRONLY is set in @flags
 * @mode: the file creation mode if O_CREAT is set in @flags
 * @errp: pointer to initialized error object
 *
 * Create a new IO channel object for a file represented
+11 −1
Original line number Diff line number Diff line
@@ -301,6 +301,9 @@ static int qio_channel_command_close(QIOChannel *ioc,
{
    QIOChannelCommand *cioc = QIO_CHANNEL_COMMAND(ioc);
    int rv = 0;
#ifndef WIN32
    pid_t wp;
#endif

    /* We close FDs before killing, because that
     * gives a better chance of clean shutdown
@@ -315,11 +318,18 @@ static int qio_channel_command_close(QIOChannel *ioc,
        rv = -1;
    }
    cioc->writefd = cioc->readfd = -1;

#ifndef WIN32
    if (qio_channel_command_abort(cioc, errp) < 0) {
    do {
        wp = waitpid(cioc->pid, NULL, 0);
    } while (wp == (pid_t)-1 && errno == EINTR);
    if (wp == (pid_t)-1) {
        error_setg_errno(errp, errno, "Failed to wait for pid %llu",
                         (unsigned long long)cioc->pid);
        return -1;
    }
#endif

    if (rv < 0) {
        error_setg_errno(errp, errno, "%s",
                         "Unable to close command");
+4 −7
Original line number Diff line number Diff line
@@ -50,11 +50,7 @@ qio_channel_file_new_path(const char *path,

    ioc = QIO_CHANNEL_FILE(object_new(TYPE_QIO_CHANNEL_FILE));

    if (flags & O_WRONLY) {
        ioc->fd = open(path, flags, mode);
    } else {
        ioc->fd = open(path, flags);
    }
    ioc->fd = qemu_open(path, flags, mode);
    if (ioc->fd < 0) {
        object_unref(OBJECT(ioc));
        error_setg_errno(errp, errno,
@@ -78,7 +74,7 @@ static void qio_channel_file_finalize(Object *obj)
{
    QIOChannelFile *ioc = QIO_CHANNEL_FILE(obj);
    if (ioc->fd != -1) {
        close(ioc->fd);
        qemu_close(ioc->fd);
        ioc->fd = -1;
    }
}
@@ -177,11 +173,12 @@ static int qio_channel_file_close(QIOChannel *ioc,
{
    QIOChannelFile *fioc = QIO_CHANNEL_FILE(ioc);

    if (close(fioc->fd) < 0) {
    if (qemu_close(fioc->fd) < 0) {
        error_setg_errno(errp, errno,
                         "Unable to close file");
        return -1;
    }
    fioc->fd = -1;
    return 0;
}

+5 −2
Original line number Diff line number Diff line
@@ -499,9 +499,12 @@ static int qio_channel_websock_handshake_read(QIOChannelWebsock *ioc,
            error_setg(errp,
                       "End of headers not found in first 4096 bytes");
            return 1;
        } else {
            return 0;
        } else if (ret == 0) {
            error_setg(errp,
                       "End of headers not found before connection closed");
            return -1;
        }
        return 0;
    }
    *handshake_end = '\0';

Loading