Only call the "connect callback" if the callback is set to non-NULL
authorRonnie Sahlberg <ronniesahlberg@gmail.com>
Sun, 9 Oct 2011 08:00:24 +0000 (19:00 +1100)
committerRonnie Sahlberg <ronniesahlberg@gmail.com>
Sun, 9 Oct 2011 08:00:24 +0000 (19:00 +1100)
lib/socket.c

index 00c65ddbc146aadb2270795cca102789c4eef154..038f6ca33201643a2b008067c6d50ffb407393d0 100644 (file)
@@ -278,12 +278,16 @@ int rpc_service(struct rpc_context *rpc, int revents)
                        rpc_set_error(rpc, "rpc_service: POLLERR, "
                                                "Unknown socket error.");
                }
-               rpc->connect_cb(rpc, RPC_STATUS_ERROR, rpc->error_string, rpc->connect_data);
+               if (rpc->connect_cb != NULL) {
+                       rpc->connect_cb(rpc, RPC_STATUS_ERROR, rpc->error_string, rpc->connect_data);
+               }
                return -1;
        }
        if (revents & POLLHUP) {
                rpc_set_error(rpc, "Socket failed with POLLHUP");
-               rpc->connect_cb(rpc, RPC_STATUS_ERROR, rpc->error_string, rpc->connect_data);
+               if (rpc->connect_cb != NULL) {
+                       rpc->connect_cb(rpc, RPC_STATUS_ERROR, rpc->error_string, rpc->connect_data);
+               }
                return -1;
        }
 
@@ -299,13 +303,17 @@ int rpc_service(struct rpc_context *rpc, int revents)
                        rpc_set_error(rpc, "rpc_service: socket error "
                                        "%s(%d) while connecting.",
                                        strerror(err), err);
-                       rpc->connect_cb(rpc, RPC_STATUS_ERROR,
+                       if (rpc->connect_cb != NULL) {
+                               rpc->connect_cb(rpc, RPC_STATUS_ERROR,
                                        NULL, rpc->connect_data);
+                       }
                        return -1;
                }
 
                rpc->is_connected = 1;
-               rpc->connect_cb(rpc, RPC_STATUS_SUCCESS, NULL, rpc->connect_data);
+               if (rpc->connect_cb != NULL) {
+                       rpc->connect_cb(rpc, RPC_STATUS_SUCCESS, NULL, rpc->connect_data);
+               }
                return 0;
        }
 
@@ -480,6 +488,7 @@ static void reconnect_cb(struct rpc_context *rpc, int status, void *data _U_, vo
        }
 
        rpc->is_connected = 1;
+       rpc->connect_cb   = NULL;
 }
 
 /* disconnect but do not error all PDUs, just move pdus in-flight back to the outqueue and reconnect */