]> git.openfabrics.org - ~shefty/librdmacm.git/commitdiff
debug fork
authorSean Hefty <sean.hefty@intel.com>
Wed, 18 Jul 2012 16:01:43 +0000 (09:01 -0700)
committerSean Hefty <sean.hefty@intel.com>
Wed, 18 Jul 2012 19:02:46 +0000 (12:02 -0700)
src/preload.c
src/rsocket.c

index f824af3fb2a0fc41927cfe00189a8e962fe2c374..e429ad609783b1aeb0c8504efa88b5e3a1f959fd 100644 (file)
@@ -48,6 +48,7 @@
 #include <netinet/tcp.h>
 #include <unistd.h>
 #include <semaphore.h>
+#include <stdio.h>
 
 #include <rdma/rdma_cma.h>
 #include <rdma/rdma_verbs.h>
@@ -467,14 +468,17 @@ static int connect_fork(int socket, const struct sockaddr *addr, socklen_t addrl
        uint32_t msg;
        long flags;
 
+       printf("connect_fork\n");
        fd = fd_getd(socket);
        flags = real.fcntl(fd, F_GETFL);
        real.fcntl(fd, F_SETFL, 0);
        ret = real.connect(fd, addr, addrlen);
+       printf("connect_fork - real connect %d %s\n", ret, strerror(errno));
        if (ret)
                return ret;
 
        ret = real.recv(fd, &msg, sizeof msg, MSG_PEEK);
+       printf("connect_fork - real recv %d msg %d\n", ret, msg);
        if ((ret != sizeof msg) || msg) {
                fd_store(socket, fd, fd_normal);
                return 0;
@@ -482,6 +486,7 @@ static int connect_fork(int socket, const struct sockaddr *addr, socklen_t addrl
 
        real.fcntl(fd, F_SETFL, flags);
        ret = transpose_socket(socket, fd_rsocket);
+       printf("connect_fork - transpose socket %d\n", ret);
        if (ret < 0)
                return ret;
 
@@ -834,11 +839,15 @@ pid_t fork(void)
        uint32_t msg;
 
        init_preload();
+       printf("fork\n");
        pid = real.fork();
+       printf("fork - pid %d fork_support %d last_accept %d \n",
+               pid, fork_support, last_accept);
        if (pid || !fork_support || (last_accept < 0) ||
            (fd_get(last_accept, &sfd) != fd_fork))
                goto out;
 
+       printf("fork - switching to rsocket\n");
        len = sizeof sin6;
        ret = real.getsockname(sfd, (struct sockaddr *) &sin6, &len);
        if (ret)
@@ -846,33 +855,42 @@ pid_t fork(void)
        sin6.sin6_flowinfo = sin6.sin6_scope_id = 0;
        memset(&sin6.sin6_addr, 0, sizeof sin6.sin6_addr);
 
+       sem_unlink("/rsocket_fork");
        sem = sem_open("/rsocket_fork", O_CREAT | O_RDWR,
                       S_IRWXU | S_IRWXG, 1);
+       printf("fork - sem_open\n");
+       printf("fork - sem value %d\n", sem_getvalue(sem, &ret));
        if (sem == SEM_FAILED)
                goto out;
 
        lfd = rsocket(sin6.sin6_family, SOCK_STREAM, 0);
+       printf("fork - rsocket %d\n", lfd);
        if (lfd < 0)
                goto sclose;
 
        param = 1;
        rsetsockopt(lfd, SOL_SOCKET, SO_REUSEADDR, &param, sizeof param);
 
+       printf("fork - waiting for semaphore\n");
        sem_wait(sem);
        ret = rbind(lfd, (struct sockaddr *) &sin6, sizeof sin6);
+       printf("fork - rbind %d\n", ret);
        if (ret)
                goto lclose;
 
        ret = rlisten(lfd, 1);
+       printf("fork - rlisten %d\n", ret);
        if (ret)
                goto lclose;
 
        msg = 0;
        ret = real.write(sfd, &msg, sizeof msg);
+       printf("fork - real write %d\n", ret);
        if (ret != sizeof msg)
                goto lclose;
 
        dfd = raccept(lfd, NULL, NULL);
+       printf("fork - raccept %d %s\n", dfd, strerror(errno));
        if (dfd < 0)
                goto lclose;
 
index ed125b3b3a382dafc7ed64b3a4fd65a3ff0c06c9..003b7d824ec13ab5e36fcd5250aa7409b509c188 100644 (file)
@@ -602,16 +602,19 @@ int raccept(int socket, struct sockaddr *addr, socklen_t *addrlen)
        struct rs_conn_data *creq, cresp;
        int ret;
 
+       printf("raccept %d\n", socket);
        rs = idm_at(&idm, socket);
        new_rs = rs_alloc(rs);
        if (!new_rs)
                return ERR(ENOMEM);
 
        ret = rdma_get_request(rs->cm_id, &new_rs->cm_id);
+       printf("raccept get request %d\n", ret);
        if (ret)
                goto err;
 
        ret = rs_insert(new_rs);
+       printf("raccept insert %d\n", ret);
        if (ret < 0)
                goto err;
 
@@ -625,6 +628,7 @@ int raccept(int socket, struct sockaddr *addr, socklen_t *addrlen)
                rs_set_nonblocking(new_rs, O_NONBLOCK);
 
        ret = rs_create_ep(new_rs);
+       printf("raccept create ep %d\n", ret);
        if (ret)
                goto err;
 
@@ -632,6 +636,7 @@ int raccept(int socket, struct sockaddr *addr, socklen_t *addrlen)
        param = new_rs->cm_id->event->param.conn;
        rs_set_conn_data(new_rs, &param, &cresp);
        ret = rdma_accept(new_rs->cm_id, &param);
+       printf("raccept rdma accept %d\n", ret);
        if (!ret)
                new_rs->state = rs_connect_rdwr;
        else if (errno == EAGAIN || errno == EWOULDBLOCK)