From: Sean Hefty Date: Mon, 13 Aug 2012 23:01:17 +0000 (-0700) Subject: pop X-Git-Url: https://openfabrics.org/gitweb/?a=commitdiff_plain;h=6e3a10115dbbc531d1352e8790a2de3a611b8e8c;p=~shefty%2Flibrdmacm.git pop --- diff --git a/meta b/meta index 344e1e2b..e8825402 100644 --- a/meta +++ b/meta @@ -1,13 +1,13 @@ Version: 1 -Previous: 8f78cc179be50491375f7684f934c17900d423b9 -Head: 9d661d643b62858fe119794e0ca41b5575faa0ce +Previous: 8daa1fa20bfd70d34f864f025fe9ed271de3e14e +Head: a50a83fb4e574a2cc435bba1abf6f9df3d0cc7a6 Applied: real-close: 3409f8d6af187d25c63a5d1f8ee8bff5f14555e2 dup2: ca5813e7cf95dee5933fc417e4a34d26f2b01824 oobinline: ac51c1095f505373a6ec54b8f1d990259fb34d97 fork-pass: 9d661d643b62858fe119794e0ca41b5575faa0ce + fork-connect: a50a83fb4e574a2cc435bba1abf6f9df3d0cc7a6 Unapplied: - fork-connect: 85934ae0f5efd5fb11c2f7414e69787d81d62b1c dbg-out: 04273ee712db4d53efb390462c1b738bb54a57df fstat: a62c653906870422edef5f6388dac9f76c953e35 dbg: 0c269855776d3001e37da8c8afe283c20e1d6cd6 diff --git a/patches/fork-connect b/patches/fork-connect index b4e0640a..62ca397f 100644 --- a/patches/fork-connect +++ b/patches/fork-connect @@ -1,4 +1,4 @@ -Bottom: 3ea2748a5c41b11a2e7033c56bddd938d2770b6c +Bottom: 216c0397df2215433e2acfe73e52db57cbf694c4 Top: 652ae6e1dadacc92be353adaafd434f1ff7ddbfa Author: Sean Hefty Date: 2012-08-10 21:44:39 -0700 @@ -29,7 +29,7 @@ Signed-off-by: Sean Hefty --- diff --git a/src/preload.c b/src/preload.c -index b18d310..8b86415 100644 +index bb8e3fb..8b86415 100644 --- a/src/preload.c +++ b/src/preload.c @@ -99,12 +99,20 @@ static int fork_support; @@ -133,32 +133,32 @@ index b18d310..8b86415 100644 - type = fd_get(socket, &fd); - if (type == fd_rsocket || type == fd_fork) { + if (fd_get(socket, &fd) == fd_rsocket) { -+ index = fd_open(); -+ if (index < 0) -+ return index; -+ -+ ret = raccept(fd, addr, addrlen); -+ if (ret < 0) { -+ fd_close(index, &fd); -+ return ret; -+ } -+ -+ fd_store(index, ret, fd_rsocket, fd_ready); -+ return index; -+ } else if (fd_gets(socket) == fd_fork_listen) { index = fd_open(); if (index < 0) return index; - ret = (type == fd_rsocket) ? raccept(fd, addr, addrlen) : - real.accept(fd, addr, addrlen); -+ ret = real.accept(fd, addr, addrlen); ++ ret = raccept(fd, addr, addrlen); if (ret < 0) { fd_close(index, &fd); return ret; } - fd_store(index, ret, type); ++ fd_store(index, ret, fd_rsocket, fd_ready); ++ return index; ++ } else if (fd_gets(socket) == fd_fork_listen) { ++ index = fd_open(); ++ if (index < 0) ++ return index; ++ ++ ret = real.accept(fd, addr, addrlen); ++ if (ret < 0) { ++ fd_close(index, &fd); ++ return ret; ++ } ++ + fd_store(index, ret, fd_normal, fd_fork_passive); return index; } else { @@ -216,16 +216,16 @@ index b18d310..8b86415 100644 + ret = rconnect(ret, (struct sockaddr *) &addr, len); + if (ret) + goto err2; -+ + +- real.close(fd); +- return rconnect(ret, addr, addrlen); + set_rsocket_options(dfd); + copysockopts(dfd, sfd, &rs, &real); + real.shutdown(sfd, SHUT_RDWR); + real.close(sfd); + fd_store(socket, dfd, fd_rsocket, fd_ready); + return; - -- real.close(fd); -- return rconnect(ret, addr, addrlen); ++ +err2: + rclose(dfd); +err1: @@ -241,32 +241,7 @@ index b18d310..8b86415 100644 static void fork_passive(int socket) { struct sockaddr_in6 sin6; -@@ -492,7 +545,7 @@ static void fork_passive(int socket) - socklen_t len; - uint32_t msg; - -- fd_get(socket, &sfd); -+ sfd = fd_getd(socket); - - len = sizeof sin6; - ret = real.getsockname(sfd, (struct sockaddr *) &sin6, &len); -@@ -510,7 +563,7 @@ static void fork_passive(int socket) - - lfd = rsocket(sin6.sin6_family, SOCK_STREAM, 0); - if (lfd < 0) { -- ret = lfd; -+ ret = lfd; - goto sclose; - } - -@@ -537,14 +590,11 @@ static void fork_passive(int socket) - goto lclose; - } - -- param = 1; -- rsetsockopt(dfd, IPPROTO_TCP, TCP_NODELAY, ¶m, sizeof param); - set_rsocket_options(dfd); -- +@@ -541,7 +594,7 @@ static void fork_passive(int socket) copysockopts(dfd, sfd, &rs, &real); real.shutdown(sfd, SHUT_RDWR); real.close(sfd); @@ -275,7 +250,7 @@ index b18d310..8b86415 100644 lclose: rclose(lfd); -@@ -553,7 +603,7 @@ sclose: +@@ -550,7 +603,7 @@ sclose: sem_close(sem); out: if (ret) @@ -284,7 +259,7 @@ index b18d310..8b86415 100644 } static inline enum fd_type fd_fork_get(int index, int *fd) -@@ -562,8 +612,10 @@ static inline enum fd_type fd_fork_get(int index, int *fd) +@@ -559,8 +612,10 @@ static inline enum fd_type fd_fork_get(int index, int *fd) fdi = idm_lookup(&idm, index); if (fdi) { @@ -296,7 +271,7 @@ index b18d310..8b86415 100644 *fd = fdi->fd; return fdi->type; -@@ -577,10 +629,7 @@ int connect(int socket, const struct sockaddr *addr, socklen_t addrlen) +@@ -574,10 +629,7 @@ int connect(int socket, const struct sockaddr *addr, socklen_t addrlen) { int fd, ret; @@ -308,7 +283,7 @@ index b18d310..8b86415 100644 ret = rconnect(fd, addr, addrlen); if (!ret || errno == EINPROGRESS) return ret; -@@ -591,9 +640,8 @@ int connect(int socket, const struct sockaddr *addr, socklen_t addrlen) +@@ -588,9 +640,8 @@ int connect(int socket, const struct sockaddr *addr, socklen_t addrlen) rclose(fd); fd = ret;