]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/libvirt.git/commitdiff
Re-add DTrace probes on 'dispose' functions
authorDaniel P. Berrange <berrange@redhat.com>
Wed, 13 Mar 2013 19:17:32 +0000 (19:17 +0000)
committerDaniel P. Berrange <berrange@redhat.com>
Thu, 14 Mar 2013 12:42:21 +0000 (12:42 +0000)
When converting to virObject, the probes on the 'Free' functions
were removed on the basis that there is a probe on virObjectFree
that suffices. This puts a burden on people writing probe scripts
to identify which object is being dispose. This adds back probes
in the 'Dispose' functions and updates the rpc monitor systemtap
example to use them

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
examples/systemtap/rpc-monitor.stp
src/libvirt_probes.d
src/rpc/virkeepalive.c
src/rpc/virnetclient.c
src/rpc/virnetserverclient.c
src/rpc/virnetsocket.c
src/rpc/virnettlscontext.c

index 4695c10f67f80448e6973d3189190a1a44c19280..c8d5c179c11daa8b8cba54c47f91777c749c16ee 100644 (file)
@@ -117,11 +117,9 @@ probe libvirt.rpc.socket_new {
    remoteAddrs[pid(), sock] = remoteAddr;
 }
 
-probe libvirt.rpc.socket_free {
-   if (refs == 1) {
-      delete localAddrs[pid(), sock];
-      delete remoteAddrs[pid(), sock];
-  }
+probe libvirt.rpc.socket_dispose {
+   delete localAddrs[pid(), sock];
+   delete remoteAddrs[pid(), sock];
 }
 
 
@@ -131,13 +129,11 @@ probe libvirt.rpc.client_new {
    print_ts(sprintf("C + %-16p local=%s remote=%s", client, localAddrs[pid(), sock], remoteAddrs[pid(), sock]));
 }
 
-probe libvirt.rpc.client_free {
-   if (refs == 1) {
-     print_ts(sprintf("C - %-16p local=%s remote=%s", client,
-              localAddrs[pid(), clientSocks[pid(), client]],
-             remoteAddrs[pid(), clientSocks[pid(), client]]));
-     delete clientSocks[pid(), client];
-   }
+probe libvirt.rpc.client_dispose {
+   print_ts(sprintf("C - %-16p local=%s remote=%s", client,
+            localAddrs[pid(), clientSocks[pid(), client]],
+           remoteAddrs[pid(), clientSocks[pid(), client]]));
+   delete clientSocks[pid(), client];
 }
 
 
@@ -147,13 +143,11 @@ probe libvirt.rpc.server_client_new {
    print_ts(sprintf("+ S %-16p local=%s remote=%s", client, localAddrs[pid(), sock], remoteAddrs[pid(), sock]));
 }
 
-probe libvirt.rpc.server_client_free {
-   if (refs == 1) {
-     print_ts(sprintf("- S %-16p local=%s remote=%s", client,
-              localAddrs[pid(), serverSocks[pid(), client]],
-              remoteAddrs[pid(), serverSocks[pid(), client]]));
-     delete serverSocks[pid(), client];
-   }
+probe libvirt.rpc.server_client_dispose {
+   print_ts(sprintf("- S %-16p local=%s remote=%s", client,
+            localAddrs[pid(), serverSocks[pid(), client]],
+            remoteAddrs[pid(), serverSocks[pid(), client]]));
+   delete serverSocks[pid(), client];
 }
 
 
index 9343fa40bb805cb5b14089438395c72db1503f75..340d665e82bae8fdc74db42ade96a8af3895a1a7 100644 (file)
@@ -26,6 +26,7 @@ provider libvirt {
        # file: src/rpc/virnetsocket.c
        # prefix: rpc
        probe rpc_socket_new(void *sock, int fd, int errfd, pid_t pid, const char *localAddr, const char *remoteAddr);
+       probe rpc_socket_dispose(void *sock);
        probe rpc_socket_send_fd(void *sock, int fd);
        probe rpc_socket_recv_fd(void *sock, int fd);
 
@@ -33,7 +34,7 @@ provider libvirt {
        # file: src/rpc/virnetserverclient.c
        # prefix: rpc
        probe rpc_server_client_new(void *client, void *sock);
-
+       probe rpc_server_client_dispose(void *client);
        probe rpc_server_client_msg_tx_queue(void *client, int len, int prog, int vers, int proc, int type, int status, int serial);
        probe rpc_server_client_msg_rx(void *client, int len, int prog, int vers, int proc, int type, int status, int serial);
 
@@ -41,7 +42,7 @@ provider libvirt {
        # file: src/rpc/virnetclient.c
        # prefix: rpc
        probe rpc_client_new(void *client, void *sock);
-
+       probe rpc_client_dispose(void *client);
        probe rpc_client_msg_tx_queue(void *client, int len, int prog, int vers, int proc, int type, int status, int serial);
        probe rpc_client_msg_rx(void *client, int len, int prog, int vers, int proc, int type, int status, int serial);
 
@@ -57,14 +58,14 @@ provider libvirt {
        # prefix: rpc
        probe rpc_tls_context_new(void *ctxt, const char *cacert, const char *cacrl,
                                  const char *cert, const char *key, int sanityCheckCert, int requireValidCert, int isServer);
-
+       probe rpc_tls_context_dispose(void *ctxt);
        probe rpc_tls_context_session_allow(void *ctxt, void *sess, const char *dname);
        probe rpc_tls_context_session_deny(void *ctxt, void *sess, const char *dname);
        probe rpc_tls_context_session_fail(void *ctxt, void *sess);
 
 
        probe rpc_tls_session_new(void *sess, void *ctxt, const char *hostname, int isServer);
-
+       probe rpc_tls_session_dispose(void *sess);
        probe rpc_tls_session_handshake_pass(void *sess);
        probe rpc_tls_session_handshake_fail(void *sess);
 
@@ -72,6 +73,7 @@ provider libvirt {
        # file: src/rpc/virkeepalive.c
        # prefix: rpc
        probe rpc_keepalive_new(void *ka, void *client);
+       probe rpc_keepalive_dispose(void *ka);
        probe rpc_keepalive_start(void *ka, void *client, int interval, int count);
        probe rpc_keepalive_stop(void *ka, void *client);
        probe rpc_keepalive_send(void *ka, void *client, int prog, int vers, int proc);
index 71dd904b38c0cddb91d6553ab128b3ea1c24326f..d49082ca96a87a9c10f0323b8a3ce6c0bf05a1c0 100644 (file)
@@ -224,6 +224,9 @@ virKeepAliveDispose(void *obj)
 {
     virKeepAlivePtr ka = obj;
 
+    PROBE(RPC_KEEPALIVE_DISPOSE,
+          "ka=%p", ka);
+
     ka->freeCB(ka->client);
 }
 
index bfa1624503929ec6aa97aab4c1f6c72ef4990808..13790786198f41f08b3e97600f81a8b21d461981 100644 (file)
@@ -596,6 +596,9 @@ void virNetClientDispose(void *obj)
     virNetClientPtr client = obj;
     int i;
 
+    PROBE(RPC_CLIENT_DISPOSE,
+          "client=%p", client);
+
     if (client->closeFf)
         client->closeFf(client->closeOpaque);
 
index 9e519e66c024d57a7c6b75a96177c436370e9d30..19063ef146bbfbe4ced84c7d72578f5b04edce90 100644 (file)
@@ -704,6 +704,9 @@ void virNetServerClientDispose(void *obj)
 {
     virNetServerClientPtr client = obj;
 
+    PROBE(RPC_SERVER_CLIENT_DISPOSE,
+          "client=%p", client);
+
     if (client->privateData &&
         client->privateDataFreeFunc)
         client->privateDataFreeFunc(client->privateData);
index 93980d65d40bddbc39e692948b60b665def9ccc5..fe4ac715d3590eab928de62650a04de0dfc4a829 100644 (file)
@@ -996,7 +996,9 @@ void virNetSocketDispose(void *obj)
 {
     virNetSocketPtr sock = obj;
 
-    VIR_DEBUG("sock=%p fd=%d", sock, sock->fd);
+    PROBE(RPC_SOCKET_DISPOSE,
+          "sock=%p", sock);
+
     if (sock->watch > 0) {
         virEventRemoveHandle(sock->watch);
         sock->watch = -1;
index 6665268f3c2cf1eeebb45e915c001b766fa40093..ece46202977214f4544f7c5d663937612527b733 100644 (file)
@@ -1114,6 +1114,9 @@ void virNetTLSContextDispose(void *obj)
 {
     virNetTLSContextPtr ctxt = obj;
 
+    PROBE(RPC_TLS_CONTEXT_DISPOSE,
+          "ctxt=%p", ctxt);
+
     gnutls_dh_params_deinit(ctxt->dhParams);
     gnutls_certificate_free_credentials(ctxt->x509cred);
 }
@@ -1366,6 +1369,9 @@ void virNetTLSSessionDispose(void *obj)
 {
     virNetTLSSessionPtr sess = obj;
 
+    PROBE(RPC_TLS_SESSION_DISPOSE,
+          "sess=%p", sess);
+
     VIR_FREE(sess->hostname);
     gnutls_deinit(sess->session);
 }