Message ID | 20180521161733.GA16751@rnd |
---|---|
State | New |
Headers | show |
Series | [v2] Delete AF_UNIX socket after close | expand |
On Mon, May 21, 2018 at 07:17:35PM +0300, Pavel Balaev wrote: > This is a second attempt at sending this patch: > > http://lists.nongnu.org/archive/html/qemu-devel/2018-05/msg04697.html > > Signed-off-by: Pavel Balaev <mail@void.so> > --- > io/channel-socket.c | 18 +++++++++++++++++- > 1 file changed, 17 insertions(+), 1 deletion(-) > > 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 Signed-off-by: Daniel P. Berrangé <berrange@redhat.com> I've queued this now, thanks. Regards, Daniel
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
This is a second attempt at sending this patch: http://lists.nongnu.org/archive/html/qemu-devel/2018-05/msg04697.html Signed-off-by: Pavel Balaev <mail@void.so> --- io/channel-socket.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-)