Delete AF_UNIX socket after close
Since version 2.12.0 AF_UNIX socket created for QMP exchange is not deleted on instance shutdown. This is due to the fact that function qio_channel_socket_finalize() is called after qio_channel_socket_close(). Signed-off-by: Pavel Balaev <mail@void.so> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
This commit is contained in:
		
							parent
							
								
									9fc53a10f8
								
							
						
					
					
						commit
						d66f78e1ea
					
				@ -685,8 +685,10 @@ qio_channel_socket_close(QIOChannel *ioc,
 | 
				
			|||||||
                         Error **errp)
 | 
					                         Error **errp)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    QIOChannelSocket *sioc = QIO_CHANNEL_SOCKET(ioc);
 | 
					    QIOChannelSocket *sioc = QIO_CHANNEL_SOCKET(ioc);
 | 
				
			||||||
 | 
					    int rc = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (sioc->fd != -1) {
 | 
					    if (sioc->fd != -1) {
 | 
				
			||||||
 | 
					        SocketAddress *addr = socket_local_address(sioc->fd, errp);
 | 
				
			||||||
#ifdef WIN32
 | 
					#ifdef WIN32
 | 
				
			||||||
        WSAEventSelect(sioc->fd, NULL, 0);
 | 
					        WSAEventSelect(sioc->fd, NULL, 0);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
@ -697,8 +699,22 @@ qio_channel_socket_close(QIOChannel *ioc,
 | 
				
			|||||||
            return -1;
 | 
					            return -1;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        sioc->fd = -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;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
    return 0;
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (addr) {
 | 
				
			||||||
 | 
					            qapi_free_SocketAddress(addr);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return rc;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int
 | 
					static int
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user