Everytime we use rpc_connect_async() internally, make sure we clear the ->connect_cb...
authorRonnie Sahlberg <ronniesahlberg@gmail.com>
Sun, 9 Oct 2011 08:47:07 +0000 (19:47 +1100)
committerRonnie Sahlberg <ronniesahlberg@gmail.com>
Sun, 9 Oct 2011 08:47:07 +0000 (19:47 +1100)
lib/libnfs.c

index a4b4a62d4f79576aca7b994ac4d25abec93a5be6..a966b02f272fd62fcec84b4318e7937b2b0fe34a 100644 (file)
@@ -292,6 +292,9 @@ static void nfs_mount_7_cb(struct rpc_context *rpc, int status, void *command_da
        struct nfs_cb_data *data = private_data;
        struct nfs_context *nfs = data->nfs;
 
+       /* Dont want any more callbacks even if the socket is closed */
+       rpc->connect_cb = NULL;
+
        if (status == RPC_STATUS_ERROR) {
                data->cb(-EFAULT, nfs, command_data, data->private_data);
                free_nfs_cb_data(data);
@@ -385,6 +388,9 @@ static void nfs_mount_4_cb(struct rpc_context *rpc, int status, void *command_da
        struct nfs_cb_data *data = private_data;
        struct nfs_context *nfs = data->nfs;
 
+       /* Dont want any more callbacks even if the socket is closed */
+       rpc->connect_cb = NULL;
+
        if (status == RPC_STATUS_ERROR) {
                data->cb(-EFAULT, nfs, command_data, data->private_data);
                free_nfs_cb_data(data);
@@ -465,6 +471,9 @@ static void nfs_mount_1_cb(struct rpc_context *rpc, int status, void *command_da
        struct nfs_cb_data *data = private_data;
        struct nfs_context *nfs = data->nfs;
 
+       /* Dont want any more callbacks even if the socket is closed */
+       rpc->connect_cb = NULL;
+
        if (status == RPC_STATUS_ERROR) {
                data->cb(-EFAULT, nfs, command_data, data->private_data);
                free_nfs_cb_data(data);
@@ -3260,6 +3269,9 @@ static void mount_export_4_cb(struct rpc_context *rpc, int status, void *command
 {
        struct mount_cb_data *data = private_data;
 
+       /* Dont want any more callbacks even if the socket is closed */
+       rpc->connect_cb = NULL;
+
        if (status == RPC_STATUS_ERROR) {       
                data->cb(rpc, -EFAULT, command_data, data->private_data);
                free_mount_cb_data(data);
@@ -3336,6 +3348,9 @@ static void mount_export_1_cb(struct rpc_context *rpc, int status, void *command
 {
        struct mount_cb_data *data = private_data;
 
+       /* Dont want any more callbacks even if the socket is closed */
+       rpc->connect_cb = NULL;
+
        if (status == RPC_STATUS_ERROR) {
                data->cb(rpc, -EFAULT, command_data, data->private_data);
                free_mount_cb_data(data);