get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/810047/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 810047,
    "url": "http://patchwork.ozlabs.org/api/patches/810047/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20170905092230.8243-7-berrange@redhat.com/",
    "project": {
        "id": 14,
        "url": "http://patchwork.ozlabs.org/api/projects/14/?format=api",
        "name": "QEMU Development",
        "link_name": "qemu-devel",
        "list_id": "qemu-devel.nongnu.org",
        "list_email": "qemu-devel@nongnu.org",
        "web_url": "",
        "scm_url": "",
        "webscm_url": "",
        "list_archive_url": "",
        "list_archive_url_format": "",
        "commit_url_format": ""
    },
    "msgid": "<20170905092230.8243-7-berrange@redhat.com>",
    "list_archive_url": null,
    "date": "2017-09-05T09:22:27",
    "name": "[PULL,v1,6/9] util: remove the obsolete non-blocking connect",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "aa0a121d23fd37f40e816a5ffba5449617d21517",
    "submitter": {
        "id": 2694,
        "url": "http://patchwork.ozlabs.org/api/people/2694/?format=api",
        "name": "Daniel P. Berrangé",
        "email": "berrange@redhat.com"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20170905092230.8243-7-berrange@redhat.com/mbox/",
    "series": [
        {
            "id": 1527,
            "url": "http://patchwork.ozlabs.org/api/series/1527/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/list/?series=1527",
            "date": "2017-09-05T09:22:21",
            "name": "[PULL,v1,1/9] io: fix temp directory used by test-io-channel-tls test",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/1527/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/810047/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/810047/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>",
        "X-Original-To": "incoming@patchwork.ozlabs.org",
        "Delivered-To": "patchwork-incoming@bilbo.ozlabs.org",
        "Authentication-Results": [
            "ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=nongnu.org\n\t(client-ip=2001:4830:134:3::11; helo=lists.gnu.org;\n\tenvelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n\treceiver=<UNKNOWN>)",
            "ext-mx07.extmail.prod.ext.phx2.redhat.com;\n\tdmarc=none (p=none dis=none) header.from=redhat.com",
            "ext-mx07.extmail.prod.ext.phx2.redhat.com;\n\tspf=fail smtp.mailfrom=berrange@redhat.com"
        ],
        "Received": [
            "from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11])\n\t(using TLSv1 with cipher AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3xmhGV0b1Dz9s75\n\tfor <incoming@patchwork.ozlabs.org>;\n\tTue,  5 Sep 2017 19:28:16 +1000 (AEST)",
            "from localhost ([::1]:57684 helo=lists.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.71) (envelope-from\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>)\n\tid 1dpA9W-0005VC-7a\n\tfor incoming@patchwork.ozlabs.org; Tue, 05 Sep 2017 05:28:14 -0400",
            "from eggs.gnu.org ([2001:4830:134:3::10]:41236)\n\tby lists.gnu.org with esmtp (Exim 4.71)\n\t(envelope-from <berrange@redhat.com>) id 1dpA4H-0001EE-NN\n\tfor qemu-devel@nongnu.org; Tue, 05 Sep 2017 05:22:55 -0400",
            "from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)\n\t(envelope-from <berrange@redhat.com>) id 1dpA4B-0002lO-Kj\n\tfor qemu-devel@nongnu.org; Tue, 05 Sep 2017 05:22:49 -0400",
            "from mx1.redhat.com ([209.132.183.28]:2282)\n\tby eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32)\n\t(Exim 4.71) (envelope-from <berrange@redhat.com>) id 1dpA4B-0002kR-Bi\n\tfor qemu-devel@nongnu.org; Tue, 05 Sep 2017 05:22:43 -0400",
            "from smtp.corp.redhat.com\n\t(int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13])\n\t(using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby mx1.redhat.com (Postfix) with ESMTPS id 64F7CC04B924;\n\tTue,  5 Sep 2017 09:22:42 +0000 (UTC)",
            "from t460.redhat.com (unknown [10.33.36.63])\n\tby smtp.corp.redhat.com (Postfix) with ESMTP id 0254C60BEC;\n\tTue,  5 Sep 2017 09:22:40 +0000 (UTC)"
        ],
        "DMARC-Filter": "OpenDMARC Filter v1.3.2 mx1.redhat.com 64F7CC04B924",
        "From": "\"Daniel P. Berrange\" <berrange@redhat.com>",
        "To": "qemu-devel@nongnu.org",
        "Date": "Tue,  5 Sep 2017 10:22:27 +0100",
        "Message-Id": "<20170905092230.8243-7-berrange@redhat.com>",
        "In-Reply-To": "<20170905092230.8243-1-berrange@redhat.com>",
        "References": "<20170905092230.8243-1-berrange@redhat.com>",
        "X-Scanned-By": "MIMEDefang 2.79 on 10.5.11.13",
        "X-Greylist": "Sender IP whitelisted, not delayed by milter-greylist-4.5.16\n\t(mx1.redhat.com [10.5.110.31]);\n\tTue, 05 Sep 2017 09:22:42 +0000 (UTC)",
        "X-detected-operating-system": "by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic]\n\t[fuzzy]",
        "X-Received-From": "209.132.183.28",
        "Subject": "[Qemu-devel] [PULL v1 6/9] util: remove the obsolete non-blocking\n\tconnect",
        "X-BeenThere": "qemu-devel@nongnu.org",
        "X-Mailman-Version": "2.1.21",
        "Precedence": "list",
        "List-Id": "<qemu-devel.nongnu.org>",
        "List-Unsubscribe": "<https://lists.nongnu.org/mailman/options/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>",
        "List-Archive": "<http://lists.nongnu.org/archive/html/qemu-devel/>",
        "List-Post": "<mailto:qemu-devel@nongnu.org>",
        "List-Help": "<mailto:qemu-devel-request@nongnu.org?subject=help>",
        "List-Subscribe": "<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=subscribe>",
        "Cc": "Peter Maydell <peter.maydell@linaro.org>,\n\tCao jin <caoj.fnst@cn.fujitsu.com>,\n\tMao Zhongyi <maozy.fnst@cn.fujitsu.com>",
        "Errors-To": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org",
        "Sender": "\"Qemu-devel\"\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>"
    },
    "content": "From: Cao jin <caoj.fnst@cn.fujitsu.com>\n\nThe non-blocking connect mechanism is obsolete, and it doesn't\nwork well in inet connection, because it will call getaddrinfo\nfirst and getaddrinfo will blocks on DNS lookups. Since commit\ne65c67e4 & d984464e, the non-blocking connect of migration goes\nthrough QIOChannel in a different manner(using a thread), and\nnobody use this old non-blocking connect anymore.\n\nAny newly written code which needs a non-blocking connect should\nuse the QIOChannel code, so we can drop NonBlockingConnectHandler\nas a concept entirely.\n\nSuggested-by: Daniel P. Berrange <berrange@redhat.com>\nSigned-off-by: Cao jin <caoj.fnst@cn.fujitsu.com>\nSigned-off-by: Mao Zhongyi <maozy.fnst@cn.fujitsu.com>\nReviewed-by: Juan Quintela <quintela@redhat.com>\nSigned-off-by: Daniel P. Berrange <berrange@redhat.com>\n---\n block/sheepdog.c       |   2 +-\n block/ssh.c            |   2 +-\n include/qemu/sockets.h |  12 +--\n io/channel-socket.c    |   2 +-\n util/qemu-sockets.c    | 205 ++++++-------------------------------------------\n 5 files changed, 28 insertions(+), 195 deletions(-)",
    "diff": "diff --git a/block/sheepdog.c b/block/sheepdog.c\nindex abb2e79065..64ab07f3b7 100644\n--- a/block/sheepdog.c\n+++ b/block/sheepdog.c\n@@ -591,7 +591,7 @@ static int connect_to_sdog(BDRVSheepdogState *s, Error **errp)\n {\n     int fd;\n \n-    fd = socket_connect(s->addr, NULL, NULL, errp);\n+    fd = socket_connect(s->addr, errp);\n \n     if (s->addr->type == SOCKET_ADDRESS_TYPE_INET && fd >= 0) {\n         int ret = socket_set_nodelay(fd);\ndiff --git a/block/ssh.c b/block/ssh.c\nindex e8f0404c03..b049a16eb9 100644\n--- a/block/ssh.c\n+++ b/block/ssh.c\n@@ -678,7 +678,7 @@ static int connect_to_ssh(BDRVSSHState *s, QDict *options,\n     }\n \n     /* Open the socket and connect. */\n-    s->sock = inet_connect_saddr(s->inet, NULL, NULL, errp);\n+    s->sock = inet_connect_saddr(s->inet, errp);\n     if (s->sock < 0) {\n         ret = -EIO;\n         goto err;\ndiff --git a/include/qemu/sockets.h b/include/qemu/sockets.h\nindex ef6b5591f7..639cc079d9 100644\n--- a/include/qemu/sockets.h\n+++ b/include/qemu/sockets.h\n@@ -27,18 +27,11 @@ int socket_set_fast_reuse(int fd);\n #define SHUT_RDWR 2\n #endif\n \n-/* callback function for nonblocking connect\n- * valid fd on success, negative error code on failure\n- */\n-typedef void NonBlockingConnectHandler(int fd, Error *err, void *opaque);\n-\n int inet_ai_family_from_address(InetSocketAddress *addr,\n                                 Error **errp);\n int inet_parse(InetSocketAddress *addr, const char *str, Error **errp);\n int inet_connect(const char *str, Error **errp);\n-int inet_connect_saddr(InetSocketAddress *saddr,\n-                       NonBlockingConnectHandler *callback, void *opaque,\n-                       Error **errp);\n+int inet_connect_saddr(InetSocketAddress *saddr, Error **errp);\n \n NetworkAddressFamily inet_netfamily(int family);\n \n@@ -46,8 +39,7 @@ int unix_listen(const char *path, char *ostr, int olen, Error **errp);\n int unix_connect(const char *path, Error **errp);\n \n SocketAddress *socket_parse(const char *str, Error **errp);\n-int socket_connect(SocketAddress *addr, NonBlockingConnectHandler *callback,\n-                   void *opaque, Error **errp);\n+int socket_connect(SocketAddress *addr, Error **errp);\n int socket_listen(SocketAddress *addr, Error **errp);\n void socket_listen_cleanup(int fd, Error **errp);\n int socket_dgram(SocketAddress *remote, SocketAddress *local, Error **errp);\ndiff --git a/io/channel-socket.c b/io/channel-socket.c\nindex 591d27e8c3..563e297357 100644\n--- a/io/channel-socket.c\n+++ b/io/channel-socket.c\n@@ -140,7 +140,7 @@ int qio_channel_socket_connect_sync(QIOChannelSocket *ioc,\n     int fd;\n \n     trace_qio_channel_socket_connect_sync(ioc, addr);\n-    fd = socket_connect(addr, NULL, NULL, errp);\n+    fd = socket_connect(addr, errp);\n     if (fd < 0) {\n         trace_qio_channel_socket_connect_fail(ioc);\n         return -1;\ndiff --git a/util/qemu-sockets.c b/util/qemu-sockets.c\nindex 6a511fbf76..b47fb45885 100644\n--- a/util/qemu-sockets.c\n+++ b/util/qemu-sockets.c\n@@ -342,88 +342,19 @@ listen_ok:\n     ((rc) == -EINPROGRESS)\n #endif\n \n-/* Struct to store connect state for non blocking connect */\n-typedef struct ConnectState {\n-    int fd;\n-    struct addrinfo *addr_list;\n-    struct addrinfo *current_addr;\n-    NonBlockingConnectHandler *callback;\n-    void *opaque;\n-} ConnectState;\n-\n-static int inet_connect_addr(struct addrinfo *addr, bool *in_progress,\n-                             ConnectState *connect_state, Error **errp);\n+static int inet_connect_addr(struct addrinfo *addr, Error **errp);\n \n-static void wait_for_connect(void *opaque)\n-{\n-    ConnectState *s = opaque;\n-    int val = 0, rc = 0;\n-    socklen_t valsize = sizeof(val);\n-    bool in_progress;\n-    Error *err = NULL;\n-\n-    qemu_set_fd_handler(s->fd, NULL, NULL, NULL);\n-\n-    do {\n-        rc = qemu_getsockopt(s->fd, SOL_SOCKET, SO_ERROR, &val, &valsize);\n-    } while (rc == -1 && errno == EINTR);\n-\n-    /* update rc to contain error */\n-    if (!rc && val) {\n-        rc = -1;\n-        errno = val;\n-    }\n-\n-    /* connect error */\n-    if (rc < 0) {\n-        error_setg_errno(&err, errno, \"Error connecting to socket\");\n-        closesocket(s->fd);\n-        s->fd = rc;\n-    }\n-\n-    /* try to connect to the next address on the list */\n-    if (s->current_addr) {\n-        while (s->current_addr->ai_next != NULL && s->fd < 0) {\n-            s->current_addr = s->current_addr->ai_next;\n-            s->fd = inet_connect_addr(s->current_addr, &in_progress, s, NULL);\n-            if (s->fd < 0) {\n-                error_free(err);\n-                err = NULL;\n-                error_setg_errno(&err, errno, \"Unable to start socket connect\");\n-            }\n-            /* connect in progress */\n-            if (in_progress) {\n-                goto out;\n-            }\n-        }\n-\n-        freeaddrinfo(s->addr_list);\n-    }\n-\n-    if (s->callback) {\n-        s->callback(s->fd, err, s->opaque);\n-    }\n-    g_free(s);\n-out:\n-    error_free(err);\n-}\n-\n-static int inet_connect_addr(struct addrinfo *addr, bool *in_progress,\n-                             ConnectState *connect_state, Error **errp)\n+static int inet_connect_addr(struct addrinfo *addr, Error **errp)\n {\n     int sock, rc;\n \n-    *in_progress = false;\n-\n     sock = qemu_socket(addr->ai_family, addr->ai_socktype, addr->ai_protocol);\n     if (sock < 0) {\n         error_setg_errno(errp, errno, \"Failed to create socket\");\n         return -1;\n     }\n     socket_set_fast_reuse(sock);\n-    if (connect_state != NULL) {\n-        qemu_set_nonblock(sock);\n-    }\n+\n     /* connect to peer */\n     do {\n         rc = 0;\n@@ -432,15 +363,12 @@ static int inet_connect_addr(struct addrinfo *addr, bool *in_progress,\n         }\n     } while (rc == -EINTR);\n \n-    if (connect_state != NULL && QEMU_SOCKET_RC_INPROGRESS(rc)) {\n-        connect_state->fd = sock;\n-        qemu_set_fd_handler(sock, NULL, wait_for_connect, connect_state);\n-        *in_progress = true;\n-    } else if (rc < 0) {\n+    if (rc < 0) {\n         error_setg_errno(errp, errno, \"Failed to connect socket\");\n         closesocket(sock);\n         return -1;\n     }\n+\n     return sock;\n }\n \n@@ -498,44 +426,24 @@ static struct addrinfo *inet_parse_connect_saddr(InetSocketAddress *saddr,\n  *\n  * @saddr: Inet socket address specification\n  * @errp: set on error\n- * @callback: callback function for non-blocking connect\n- * @opaque: opaque for callback function\n  *\n  * Returns: -1 on error, file descriptor on success.\n- *\n- * If @callback is non-null, the connect is non-blocking.  If this\n- * function succeeds, callback will be called when the connection\n- * completes, with the file descriptor on success, or -1 on error.\n  */\n-int inet_connect_saddr(InetSocketAddress *saddr,\n-                       NonBlockingConnectHandler *callback, void *opaque,\n-                       Error **errp)\n+int inet_connect_saddr(InetSocketAddress *saddr, Error **errp)\n {\n     Error *local_err = NULL;\n     struct addrinfo *res, *e;\n     int sock = -1;\n-    bool in_progress;\n-    ConnectState *connect_state = NULL;\n \n     res = inet_parse_connect_saddr(saddr, errp);\n     if (!res) {\n         return -1;\n     }\n \n-    if (callback != NULL) {\n-        connect_state = g_malloc0(sizeof(*connect_state));\n-        connect_state->addr_list = res;\n-        connect_state->callback = callback;\n-        connect_state->opaque = opaque;\n-    }\n-\n     for (e = res; e != NULL; e = e->ai_next) {\n         error_free(local_err);\n         local_err = NULL;\n-        if (connect_state != NULL) {\n-            connect_state->current_addr = e;\n-        }\n-        sock = inet_connect_addr(e, &in_progress, connect_state, &local_err);\n+        sock = inet_connect_addr(e, &local_err);\n         if (sock >= 0) {\n             break;\n         }\n@@ -543,15 +451,8 @@ int inet_connect_saddr(InetSocketAddress *saddr,\n \n     if (sock < 0) {\n         error_propagate(errp, local_err);\n-    } else if (in_progress) {\n-        /* wait_for_connect() will do the rest */\n-        return sock;\n-    } else {\n-        if (callback) {\n-            callback(sock, NULL, opaque);\n-        }\n     }\n-    g_free(connect_state);\n+\n     freeaddrinfo(res);\n     return sock;\n }\n@@ -730,7 +631,7 @@ int inet_connect(const char *str, Error **errp)\n     InetSocketAddress *addr = g_new(InetSocketAddress, 1);\n \n     if (!inet_parse(addr, str, errp)) {\n-        sock = inet_connect_saddr(addr, NULL, NULL, errp);\n+        sock = inet_connect_saddr(addr, errp);\n     }\n     qapi_free_InetSocketAddress(addr);\n     return sock;\n@@ -763,21 +664,16 @@ static bool vsock_parse_vaddr_to_sockaddr(const VsockSocketAddress *vaddr,\n     return true;\n }\n \n-static int vsock_connect_addr(const struct sockaddr_vm *svm, bool *in_progress,\n-                              ConnectState *connect_state, Error **errp)\n+static int vsock_connect_addr(const struct sockaddr_vm *svm, Error **errp)\n {\n     int sock, rc;\n \n-    *in_progress = false;\n-\n     sock = qemu_socket(AF_VSOCK, SOCK_STREAM, 0);\n     if (sock < 0) {\n         error_setg_errno(errp, errno, \"Failed to create socket\");\n         return -1;\n     }\n-    if (connect_state != NULL) {\n-        qemu_set_nonblock(sock);\n-    }\n+\n     /* connect to peer */\n     do {\n         rc = 0;\n@@ -786,50 +682,26 @@ static int vsock_connect_addr(const struct sockaddr_vm *svm, bool *in_progress,\n         }\n     } while (rc == -EINTR);\n \n-    if (connect_state != NULL && QEMU_SOCKET_RC_INPROGRESS(rc)) {\n-        connect_state->fd = sock;\n-        qemu_set_fd_handler(sock, NULL, wait_for_connect, connect_state);\n-        *in_progress = true;\n-    } else if (rc < 0) {\n+    if (rc < 0) {\n         error_setg_errno(errp, errno, \"Failed to connect socket\");\n         closesocket(sock);\n         return -1;\n     }\n+\n     return sock;\n }\n \n-static int vsock_connect_saddr(VsockSocketAddress *vaddr,\n-                               NonBlockingConnectHandler *callback,\n-                               void *opaque,\n-                               Error **errp)\n+static int vsock_connect_saddr(VsockSocketAddress *vaddr, Error **errp)\n {\n     struct sockaddr_vm svm;\n     int sock = -1;\n-    bool in_progress;\n-    ConnectState *connect_state = NULL;\n \n     if (!vsock_parse_vaddr_to_sockaddr(vaddr, &svm, errp)) {\n         return -1;\n     }\n \n-    if (callback != NULL) {\n-        connect_state = g_malloc0(sizeof(*connect_state));\n-        connect_state->callback = callback;\n-        connect_state->opaque = opaque;\n-    }\n+    sock = vsock_connect_addr(&svm, errp);\n \n-    sock = vsock_connect_addr(&svm, &in_progress, connect_state, errp);\n-    if (sock < 0) {\n-        /* do nothing */\n-    } else if (in_progress) {\n-        /* wait_for_connect() will do the rest */\n-        return sock;\n-    } else {\n-        if (callback) {\n-            callback(sock, NULL, opaque);\n-        }\n-    }\n-    g_free(connect_state);\n     return sock;\n }\n \n@@ -889,9 +761,7 @@ static void vsock_unsupported(Error **errp)\n     error_setg(errp, \"socket family AF_VSOCK unsupported\");\n }\n \n-static int vsock_connect_saddr(VsockSocketAddress *vaddr,\n-                               NonBlockingConnectHandler *callback,\n-                               void *opaque, Error **errp)\n+static int vsock_connect_saddr(VsockSocketAddress *vaddr, Error **errp)\n {\n     vsock_unsupported(errp);\n     return -1;\n@@ -994,12 +864,9 @@ err:\n     return -1;\n }\n \n-static int unix_connect_saddr(UnixSocketAddress *saddr,\n-                              NonBlockingConnectHandler *callback, void *opaque,\n-                              Error **errp)\n+static int unix_connect_saddr(UnixSocketAddress *saddr, Error **errp)\n {\n     struct sockaddr_un un;\n-    ConnectState *connect_state = NULL;\n     int sock, rc;\n \n     if (saddr->path == NULL) {\n@@ -1012,12 +879,6 @@ static int unix_connect_saddr(UnixSocketAddress *saddr,\n         error_setg_errno(errp, errno, \"Failed to create socket\");\n         return -1;\n     }\n-    if (callback != NULL) {\n-        connect_state = g_malloc0(sizeof(*connect_state));\n-        connect_state->callback = callback;\n-        connect_state->opaque = opaque;\n-        qemu_set_nonblock(sock);\n-    }\n \n     if (strlen(saddr->path) > sizeof(un.sun_path)) {\n         error_setg(errp, \"UNIX socket path '%s' is too long\", saddr->path);\n@@ -1038,29 +899,16 @@ static int unix_connect_saddr(UnixSocketAddress *saddr,\n         }\n     } while (rc == -EINTR);\n \n-    if (connect_state != NULL && QEMU_SOCKET_RC_INPROGRESS(rc)) {\n-        connect_state->fd = sock;\n-        qemu_set_fd_handler(sock, NULL, wait_for_connect, connect_state);\n-        return sock;\n-    } else if (rc >= 0) {\n-        /* non blocking socket immediate success, call callback */\n-        if (callback != NULL) {\n-            callback(sock, NULL, opaque);\n-        }\n-    }\n-\n     if (rc < 0) {\n         error_setg_errno(errp, -rc, \"Failed to connect socket %s\",\n                          saddr->path);\n         goto err;\n     }\n \n-    g_free(connect_state);\n     return sock;\n \n  err:\n     close(sock);\n-    g_free(connect_state);\n     return -1;\n }\n \n@@ -1075,9 +923,7 @@ static int unix_listen_saddr(UnixSocketAddress *saddr,\n     return -1;\n }\n \n-static int unix_connect_saddr(UnixSocketAddress *saddr,\n-                              NonBlockingConnectHandler *callback, void *opaque,\n-                              Error **errp)\n+static int unix_connect_saddr(UnixSocketAddress *saddr, Error **errp)\n {\n     error_setg(errp, \"unix sockets are not available on windows\");\n     errno = ENOTSUP;\n@@ -1123,7 +969,7 @@ int unix_connect(const char *path, Error **errp)\n \n     saddr = g_new0(UnixSocketAddress, 1);\n     saddr->path = g_strdup(path);\n-    sock = unix_connect_saddr(saddr, NULL, NULL, errp);\n+    sock = unix_connect_saddr(saddr, errp);\n     qapi_free_UnixSocketAddress(saddr);\n     return sock;\n }\n@@ -1168,30 +1014,25 @@ fail:\n     return NULL;\n }\n \n-int socket_connect(SocketAddress *addr, NonBlockingConnectHandler *callback,\n-                   void *opaque, Error **errp)\n+int socket_connect(SocketAddress *addr, Error **errp)\n {\n     int fd;\n \n     switch (addr->type) {\n     case SOCKET_ADDRESS_TYPE_INET:\n-        fd = inet_connect_saddr(&addr->u.inet, callback, opaque, errp);\n+        fd = inet_connect_saddr(&addr->u.inet, errp);\n         break;\n \n     case SOCKET_ADDRESS_TYPE_UNIX:\n-        fd = unix_connect_saddr(&addr->u.q_unix, callback, opaque, errp);\n+        fd = unix_connect_saddr(&addr->u.q_unix, errp);\n         break;\n \n     case SOCKET_ADDRESS_TYPE_FD:\n         fd = monitor_get_fd(cur_mon, addr->u.fd.str, errp);\n-        if (fd >= 0 && callback) {\n-            qemu_set_nonblock(fd);\n-            callback(fd, NULL, opaque);\n-        }\n         break;\n \n     case SOCKET_ADDRESS_TYPE_VSOCK:\n-        fd = vsock_connect_saddr(&addr->u.vsock, callback, opaque, errp);\n+        fd = vsock_connect_saddr(&addr->u.vsock, errp);\n         break;\n \n     default:\n",
    "prefixes": [
        "PULL",
        "v1",
        "6/9"
    ]
}