While tracing connections from a remote client, it helps to keep track of the connection lifecycle. Messages such as the following : error : virNetSocketReadWire:1574 : End of file while reading data: Input/output error are rather unhelpful. They do not indicate if the client had earlier asked for connection closure via libvirt API. This patch introduces messages to annotate when a client connected/disconnected. Signed-off-by: Prerna Saxena <saxenap.ltc@xxxxxxxxx> --- src/rpc/virnetserverclient.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/rpc/virnetserverclient.c b/src/rpc/virnetserverclient.c index 85857bc..a77feaa 100644 --- a/src/rpc/virnetserverclient.c +++ b/src/rpc/virnetserverclient.c @@ -678,14 +678,19 @@ int virNetServerClientGetTLSKeySize(virNetServerClientPtr client) return size; } #endif - +/* + * This mostly just needs to publish the client socket FD to logs. + * It does not necessarily need a lock, or will add lock contention problems. + * Replace the lock with a reference counting mechanism, to prevent the client + * object from being deallocated while this is being run + */ int virNetServerClientGetFD(virNetServerClientPtr client) { int fd = -1; - virObjectLock(client); + virObjectRef(client); if (client->sock) fd = virNetSocketGetFD(client->sock); - virObjectUnlock(client); + virObjectUnref(client); return fd; } @@ -965,7 +970,9 @@ void virNetServerClientClose(virNetServerClientPtr client) virKeepAlivePtr ka; virObjectLock(client); - VIR_DEBUG("client=%p", client); + VIR_WARN("Free'ing up resources for client=%p sock=%d", client, + virNetServerClientGetFD(client)); + if (!client->sock) { virObjectUnlock(client); return; @@ -1039,6 +1046,8 @@ void virNetServerClientDelayedClose(virNetServerClientPtr client) virObjectLock(client); client->delayedClose = true; virObjectUnlock(client); + VIR_WARN("Client=%p sock=%d requested closure of connection.", + client, virNetServerClientGetFD(client)); } void virNetServerClientImmediateClose(virNetServerClientPtr client) @@ -1151,6 +1160,7 @@ static void virNetServerClientDispatchRead(virNetServerClientPtr client) if (client->rx->nfds == 0) { if (virNetServerClientRead(client) < 0) { client->wantClose = true; + VIR_WARN("Client=%p sock=%p closed connection", client, client->sock); return; /* Error */ } } -- 1.8.1.2 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list