]> git.openfabrics.org - ~shefty/librdmacm.git/commitdiff
librdmacm: Delay ACM connection until resolving an address
authorSean Hefty <sean.hefty@intel.com>
Fri, 25 May 2012 17:48:47 +0000 (10:48 -0700)
committerSean Hefty <sean.hefty@intel.com>
Mon, 28 May 2012 08:11:21 +0000 (01:11 -0700)
Avoid creating a connection to the ACM service when
it's not needed.  For example, if the user of the librdmacm
is a server application, it will not use ACM services.

Signed-off-by: Sean Hefty <sean.hefty@intel.com>
src/acm.c
src/cma.c
src/cma.h

index 9c6591958bcd1b3eda9b8e092e58cdb9a1d325ba..5bdeb88dac4a38bb30733209328331a31fb71e32 100755 (executable)
--- a/src/acm.c
+++ b/src/acm.c
@@ -89,26 +89,30 @@ static void ucma_set_server_port(void)
 void ucma_ib_init(void)
 {
        struct sockaddr_in addr;
+       static int init;
        int ret;
 
+       if (init)
+               return;
+
+       pthread_mutex_lock(&acm_lock);
        ucma_set_server_port();
        sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
        if (sock < 0)
-               return;
+               goto out;
 
        memset(&addr, 0, sizeof addr);
        addr.sin_family = AF_INET;
        addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
        addr.sin_port = htons(server_port);
        ret = connect(sock, (struct sockaddr *) &addr, sizeof(addr));
-       if (ret)
-               goto err;
-
-       return;
-
-err:
-       close(sock);
-       sock = -1;
+       if (ret) {
+               close(sock);
+               sock = -1;
+       }
+out:
+       init = 1;
+       pthread_mutex_unlock(&acm_lock);
 }
 
 void ucma_ib_cleanup(void)
index 753612c566a4293252f273bfe32cd1925de6ebca..f688c4c24b098a05c31bc1953959b6b076856ffb 100755 (executable)
--- a/src/cma.c
+++ b/src/cma.c
@@ -274,8 +274,6 @@ int ucma_init(void)
                ib += (cma_dev->verbs->device->transport_type == IBV_TRANSPORT_IB);
        }
 
-       if (ib)
-               ucma_ib_init();
        cma_dev_cnt = dev_cnt;
        ucma_set_af_ib_support();
        pthread_mutex_unlock(&mut);
index 2f5215c10298646a3a55514492d42ca7f3cdee5f..2ee47675d83cb5e1a00531c5170c3a1cf24f30bc 100644 (file)
--- a/src/cma.h
+++ b/src/cma.h
@@ -119,11 +119,9 @@ extern int af_ib_support;
 #define RAI_ROUTEONLY          0x01000000
 
 #ifdef USE_IB_ACM
-void ucma_ib_init();
 void ucma_ib_cleanup();
 void ucma_ib_resolve(struct rdma_addrinfo **rai, struct rdma_addrinfo *hints);
 #else
-#define ucma_ib_init()
 #define ucma_ib_cleanup()
 #define ucma_ib_resolve(x, y)
 #endif