diff options
author | Peter Maydell | 2018-06-28 18:53:31 +0200 |
---|---|---|
committer | Peter Maydell | 2018-06-28 18:53:31 +0200 |
commit | 609ef9f451759151d0bfe7c3843410ab94d68f18 (patch) | |
tree | c74ce9664aeed913305449fd59c5e1c301948a73 /io/channel-socket.c | |
parent | Merge remote-tracking branch 'remotes/stefanha/tags/block-pull-request' into ... (diff) | |
parent | Delete AF_UNIX socket after close (diff) | |
download | qemu-609ef9f451759151d0bfe7c3843410ab94d68f18.tar.gz qemu-609ef9f451759151d0bfe7c3843410ab94d68f18.tar.xz qemu-609ef9f451759151d0bfe7c3843410ab94d68f18.zip |
Merge remote-tracking branch 'remotes/berrange/tags/qio-next-pull-request' into staging
Merge qio 2018-06-28 v3
Misc bug fixes for sockets channels
# gpg: Signature made Thu 28 Jun 2018 13:37:35 BST
# 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:
Delete AF_UNIX socket after close
socket: don't free msgfds if error equals EAGAIN
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'io/channel-socket.c')
-rw-r--r-- | io/channel-socket.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/io/channel-socket.c b/io/channel-socket.c index 57cfb4d3a6..b50e63a053 100644 --- a/io/channel-socket.c +++ b/io/channel-socket.c @@ -685,8 +685,10 @@ qio_channel_socket_close(QIOChannel *ioc, Error **errp) { QIOChannelSocket *sioc = QIO_CHANNEL_SOCKET(ioc); + int rc = 0; if (sioc->fd != -1) { + SocketAddress *addr = socket_local_address(sioc->fd, errp); #ifdef WIN32 WSAEventSelect(sioc->fd, NULL, 0); #endif @@ -697,8 +699,22 @@ qio_channel_socket_close(QIOChannel *ioc, return -1; } sioc->fd = -1; + + if (addr && addr->type == SOCKET_ADDRESS_TYPE_UNIX + && addr->u.q_unix.path) { + if (unlink(addr->u.q_unix.path) < 0 && errno != ENOENT) { + error_setg_errno(errp, errno, + "Failed to unlink socket %s", + addr->u.q_unix.path); + rc = -1; + } + } + + if (addr) { + qapi_free_SocketAddress(addr); + } } - return 0; + return rc; } static int |