From: Sean Hefty Date: Mon, 20 Aug 2012 16:06:49 +0000 (-0700) Subject: rspreload: Fix checks in fork_active X-Git-Url: https://openfabrics.org/gitweb/?a=commitdiff_plain;h=59482419509389d17feba6f6210abaec752eae80;p=~shefty%2Flibrdmacm.git rspreload: Fix checks in fork_active Signed-off-by: Sean Hefty --- diff --git a/src/preload.c b/src/preload.c index 8f19af59..0645f6dd 100644 --- a/src/preload.c +++ b/src/preload.c @@ -504,6 +504,13 @@ static void fork_active(int socket) sfd = fd_getd(socket); + flags = real.fcntl(sfd, F_GETFL); + real.fcntl(sfd, F_SETFL, 0); + ret = real.recv(sfd, &msg, sizeof msg, MSG_PEEK); + real.fcntl(sfd, F_SETFL, flags); + if ((ret != sizeof msg) || msg) + goto err1; + len = sizeof addr; ret = real.getpeername(sfd, (struct sockaddr *) &addr, &len); if (ret) @@ -513,14 +520,7 @@ static void fork_active(int socket) if (dfd < 0) goto err1; - flags = real.fcntl(sfd, F_GETFL); - real.fcntl(sfd, F_SETFL, 0); - ret = real.recv(sfd, &msg, sizeof msg, MSG_PEEK); - real.fcntl(sfd, F_SETFL, flags); - if ((ret != sizeof msg) || msg) - goto err2; - - ret = rconnect(ret, (struct sockaddr *) &addr, len); + ret = rconnect(dfd, (struct sockaddr *) &addr, len); if (ret) goto err2; @@ -618,9 +618,9 @@ static inline enum fd_type fd_fork_get(int index, int *fd) fdi = idm_lookup(&idm, index); if (fdi) { - if (fdi->type == fd_fork_passive) + if (fdi->state == fd_fork_passive) fork_passive(index); - else if (fdi->type == fd_fork_active) + else if (fdi->state == fd_fork_active) fork_active(index); *fd = fdi->fd; return fdi->type;