Add an assert to track if we try to use an rpc_context after it has been destroyed
[deb_libnfs.git] / lib / libnfs-sync.c
index 09e197ad312fcf3a5c6ee77a8ad9fcde72aff454..35475571e5e951dada429263e42b0d8cde1f5216 100644 (file)
@@ -38,6 +38,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <assert.h>
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <fcntl.h>
@@ -66,6 +67,8 @@ static void wait_for_reply(struct rpc_context *rpc, struct sync_cb_data *cb_data
 {
        struct pollfd pfd;
 
+       assert(rpc->magic == RPC_CONTEXT_MAGIC);
+
        while (!cb_data->is_finished) {
 
                pfd.fd = rpc_get_fd(rpc);
@@ -134,6 +137,8 @@ int nfs_mount(struct nfs_context *nfs, const char *server, const char *export)
        struct sync_cb_data cb_data;
        struct rpc_context *rpc = nfs_get_rpc_context(nfs);
 
+       assert(rpc->magic == RPC_CONTEXT_MAGIC);
+
        cb_data.is_finished = 0;
 
        if (nfs_mount_async(nfs, server, export, mount_cb, &cb_data) != 0) {
@@ -1146,7 +1151,9 @@ int nfs_link(struct nfs_context *nfs, const char *oldpath, const char *newpath)
 void mount_getexports_cb(struct rpc_context *mount_context, int status, void *data, void *private_data)
 {
        struct sync_cb_data *cb_data = private_data;
-       exports export = *(exports *)data;
+       exports export;
+
+       assert(mount_context->magic == RPC_CONTEXT_MAGIC);
 
        cb_data->is_finished = 1;
        cb_data->status = status;
@@ -1157,6 +1164,7 @@ void mount_getexports_cb(struct rpc_context *mount_context, int status, void *da
                return;
        }
 
+       export = *(exports *)data;
        while (export != NULL) {
                exports new_export;
 
@@ -1228,6 +1236,8 @@ void callit_cb(struct rpc_context *rpc, int status, void *data _U_, void *privat
        char hostdd[16];
        struct nfs_server_list *srvr;
 
+       assert(rpc->magic == RPC_CONTEXT_MAGIC);
+
        if (status == RPC_STATUS_CANCEL) {
                return;
        }
@@ -1281,6 +1291,8 @@ static int send_nfsd_probes(struct rpc_context *rpc, INTERFACE_INFO *InterfaceLi
 {
   int i=0;
 
+  assert(rpc->magic == RPC_CONTEXT_MAGIC);
+
   for(i = 0; i < numIfs; i++) 
   {
     SOCKADDR *pAddress;
@@ -1411,6 +1423,8 @@ static int send_nfsd_probes(struct rpc_context *rpc, struct ifconf *ifc, struct
 {
        char *ptr;
 
+       assert(rpc->magic == RPC_CONTEXT_MAGIC);
+
        for (ptr =(char *)(ifc->ifc_buf); ptr < (char *)(ifc->ifc_buf) + ifc->ifc_len; ) {
                struct ifreq *ifr;
                char bcdd[16];