]> git.openfabrics.org - ~shefty/librdmacm.git/commitdiff
refresh
authorSean Hefty <sean.hefty@intel.com>
Sat, 11 Aug 2012 05:06:41 +0000 (22:06 -0700)
committerSean Hefty <sean.hefty@intel.com>
Sat, 11 Aug 2012 05:06:41 +0000 (22:06 -0700)
meta
patches/fork-connect
patches/refresh-temp [deleted file]

diff --git a/meta b/meta
index 0070404f2b2623c9b76020eeb0031c0738e9ac3d..1b714daa05d3bcabd96aec3531fb65d05cba0abe 100644 (file)
--- a/meta
+++ b/meta
@@ -1,12 +1,11 @@
 Version: 1
-Previous: 5c4b4489cce95156bf7e607a77f3d07fe8f0fab8
-Head: 124af5c0388f70afb7680d5551b45deb3f232183
+Previous: 9e3b8e99f67e95c4f38b158c8c77379d3ec449db
+Head: 8c650d7a0e10582928f0fd3e5d9e045a84fc0b66
 Applied:
   real-close: 3409f8d6af187d25c63a5d1f8ee8bff5f14555e2
   dup2: ca5813e7cf95dee5933fc417e4a34d26f2b01824
   oobinline: ac51c1095f505373a6ec54b8f1d990259fb34d97
-  fork-connect: 10f8a3f709f58fda4072dbd847e9fe2e892a65f7
-  refresh-temp: 124af5c0388f70afb7680d5551b45deb3f232183
+  fork-connect: 8c650d7a0e10582928f0fd3e5d9e045a84fc0b66
 Unapplied:
   dbg-out: 04273ee712db4d53efb390462c1b738bb54a57df
   fstat: a62c653906870422edef5f6388dac9f76c953e35
index 341d01ec08413e3dfc89be0624b18d38a4b787e8..a04790c226eb25f8408b02e32923133732bf0e78 100644 (file)
@@ -1,5 +1,5 @@
 Bottom: 3ea2748a5c41b11a2e7033c56bddd938d2770b6c
-Top:    3ea2748a5c41b11a2e7033c56bddd938d2770b6c
+Top:    216390f24bdb1fa45d9326571f8dd46b1fd804ef
 Author: Sean Hefty <sean.hefty@intel.com>
 Date:   2012-08-10 21:44:39 -0700
 
@@ -27,4 +27,175 @@ Signed-off-by: Sean Hefty <sean.hefty@intel.com>
 
 ---
 
-
+diff --git a/src/preload.c b/src/preload.c
+index b18d310..c61d092 100644
+--- a/src/preload.c
++++ b/src/preload.c
+@@ -99,12 +99,20 @@ static int fork_support;
+ enum fd_type {
+       fd_normal,
+-      fd_rsocket,
+-      fd_fork
++      fd_rsocket
++};
++
++enum fd_fork_state {
++      fd_ready,
++      fd_fork,
++      fd_fork_listen,
++      fd_fork_active,
++      fd_fork_passive
+ };
+ struct fd_info {
+       enum fd_type type;
++      enum fd_fork_state state;
+       int fd;
+       int dupfd;
+       atomic_t refcnt;
+@@ -143,13 +151,14 @@ err1:
+       return ret;
+ }
+-static void fd_store(int index, int fd, enum fd_type type)
++static void fd_store(int index, int fd, enum fd_type type, enum fd_fork_state state)
+ {
+       struct fd_info *fdi;
+       fdi = idm_at(&idm, index);
+       fdi->fd = fd;
+       fdi->type = type;
++      fdi->state = state;
+ }
+ static inline enum fd_type fd_get(int index, int *fd)
+@@ -175,6 +184,14 @@ static inline int fd_getd(int index)
+       return fdi ? fdi->fd : index;
+ }
++static inline enum fd_state fd_gets(int index)
++{
++      struct fd_info *fdi;
++
++      fdi = idm_lookup(&idm, index);
++      return fdi ? fdi->state : fd_ready;
++}
++
+ static inline enum fd_type fd_gett(int index)
+ {
+       struct fd_info *fdi;
+@@ -353,7 +370,7 @@ static int transpose_socket(int socket, enum fd_type new_type)
+       if (ret)
+               goto err;
+-      fd_store(socket, dfd, new_type);
++      fd_store(socket, dfd, new_type, fd_ready);
+       return dfd;
+ err:
+@@ -398,9 +415,9 @@ int socket(int domain, int type, int protocol)
+                       ret = real.socket(domain, type, protocol);
+                       if (ret < 0)
+                               return ret;
+-                      fd_store(index, ret, fd_fork);
++                      fd_store(index, ret, fd_normal, fd_fork);
+               } else {
+-                      fd_store(index, ret, fd_rsocket);
++                      fd_store(index, ret, fd_rsocket, fd_ready);
+                       set_rsocket_options(ret);
+               }
+               return index;
+@@ -427,22 +444,32 @@ int listen(int socket, int backlog)
+ int accept(int socket, struct sockaddr *addr, socklen_t *addrlen)
+ {
+       int fd, index, ret;
+-      enum fd_type type;
+-      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);
+               if (ret < 0) {
+                       fd_close(index, &fd);
+                       return ret;
+               }
+-              fd_store(index, ret, type);
++              fd_store(index, ret, fd_normal, fd_fork_passive);
+               return index;
+       } else {
+               return real.accept(fd, addr, addrlen);
+@@ -471,7 +498,7 @@ static int fork_active(int socket, const struct sockaddr *addr, socklen_t addrle
+       ret = real.recv(fd, &msg, sizeof msg, MSG_PEEK);
+       if ((ret != sizeof msg) || msg) {
+-              fd_store(socket, fd, fd_normal);
++              fd_store(socket, fd, fd_normal, fd_ready);
+               return 0;
+       }
+@@ -544,7 +571,7 @@ static void fork_passive(int socket)
+       copysockopts(dfd, sfd, &rs, &real);
+       real.shutdown(sfd, SHUT_RDWR);
+       real.close(sfd);
+-      fd_store(socket, dfd, fd_rsocket);
++      fd_store(socket, dfd, fd_rsocket, fd_ready);
+ lclose:
+       rclose(lfd);
+@@ -553,7 +580,7 @@ sclose:
+       sem_close(sem);
+ out:
+       if (ret)
+-              fd_store(socket, sfd, fd_normal);
++              fd_store(socket, sfd, fd_normal, fd_ready);
+ }
+ static inline enum fd_type fd_fork_get(int index, int *fd)
+@@ -577,10 +604,7 @@ int connect(int socket, const struct sockaddr *addr, socklen_t addrlen)
+ {
+       int fd, ret;
+-      switch (fd_get(socket, &fd)) {
+-      case fd_fork:
+-              return fork_active(socket, addr, addrlen);
+-      case fd_rsocket:
++      if (fd_get(socket, &fd) == fd_rsocket) {
+               ret = rconnect(fd, addr, addrlen);
+               if (!ret || errno == EINPROGRESS)
+                       return ret;
+@@ -591,12 +615,9 @@ int connect(int socket, const struct sockaddr *addr, socklen_t addrlen)
+               rclose(fd);
+               fd = ret;
+-              break;
+-      default:
+-              break;
++      } else {
++              return real.connect(fd, addr, addrlen);
+       }
+-
+-      return real.connect(fd, addr, addrlen);
+ }
+ ssize_t recv(int socket, void *buf, size_t len, int flags)
diff --git a/patches/refresh-temp b/patches/refresh-temp
deleted file mode 100644 (file)
index 5d465c1..0000000
+++ /dev/null
@@ -1,181 +0,0 @@
-Bottom: 3ea2748a5c41b11a2e7033c56bddd938d2770b6c
-Top:    216390f24bdb1fa45d9326571f8dd46b1fd804ef
-Author: Sean Hefty <sean.hefty@intel.com>
-Date:   2012-08-10 22:06:41 -0700
-
-Refresh of fork-connect
-
----
-
-diff --git a/src/preload.c b/src/preload.c
-index b18d310..c61d092 100644
---- a/src/preload.c
-+++ b/src/preload.c
-@@ -99,12 +99,20 @@ static int fork_support;
- enum fd_type {
-       fd_normal,
--      fd_rsocket,
--      fd_fork
-+      fd_rsocket
-+};
-+
-+enum fd_fork_state {
-+      fd_ready,
-+      fd_fork,
-+      fd_fork_listen,
-+      fd_fork_active,
-+      fd_fork_passive
- };
- struct fd_info {
-       enum fd_type type;
-+      enum fd_fork_state state;
-       int fd;
-       int dupfd;
-       atomic_t refcnt;
-@@ -143,13 +151,14 @@ err1:
-       return ret;
- }
--static void fd_store(int index, int fd, enum fd_type type)
-+static void fd_store(int index, int fd, enum fd_type type, enum fd_fork_state state)
- {
-       struct fd_info *fdi;
-       fdi = idm_at(&idm, index);
-       fdi->fd = fd;
-       fdi->type = type;
-+      fdi->state = state;
- }
- static inline enum fd_type fd_get(int index, int *fd)
-@@ -175,6 +184,14 @@ static inline int fd_getd(int index)
-       return fdi ? fdi->fd : index;
- }
-+static inline enum fd_state fd_gets(int index)
-+{
-+      struct fd_info *fdi;
-+
-+      fdi = idm_lookup(&idm, index);
-+      return fdi ? fdi->state : fd_ready;
-+}
-+
- static inline enum fd_type fd_gett(int index)
- {
-       struct fd_info *fdi;
-@@ -353,7 +370,7 @@ static int transpose_socket(int socket, enum fd_type new_type)
-       if (ret)
-               goto err;
--      fd_store(socket, dfd, new_type);
-+      fd_store(socket, dfd, new_type, fd_ready);
-       return dfd;
- err:
-@@ -398,9 +415,9 @@ int socket(int domain, int type, int protocol)
-                       ret = real.socket(domain, type, protocol);
-                       if (ret < 0)
-                               return ret;
--                      fd_store(index, ret, fd_fork);
-+                      fd_store(index, ret, fd_normal, fd_fork);
-               } else {
--                      fd_store(index, ret, fd_rsocket);
-+                      fd_store(index, ret, fd_rsocket, fd_ready);
-                       set_rsocket_options(ret);
-               }
-               return index;
-@@ -427,22 +444,32 @@ int listen(int socket, int backlog)
- int accept(int socket, struct sockaddr *addr, socklen_t *addrlen)
- {
-       int fd, index, ret;
--      enum fd_type type;
--      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);
-               if (ret < 0) {
-                       fd_close(index, &fd);
-                       return ret;
-               }
--              fd_store(index, ret, type);
-+              fd_store(index, ret, fd_normal, fd_fork_passive);
-               return index;
-       } else {
-               return real.accept(fd, addr, addrlen);
-@@ -471,7 +498,7 @@ static int fork_active(int socket, const struct sockaddr *addr, socklen_t addrle
-       ret = real.recv(fd, &msg, sizeof msg, MSG_PEEK);
-       if ((ret != sizeof msg) || msg) {
--              fd_store(socket, fd, fd_normal);
-+              fd_store(socket, fd, fd_normal, fd_ready);
-               return 0;
-       }
-@@ -544,7 +571,7 @@ static void fork_passive(int socket)
-       copysockopts(dfd, sfd, &rs, &real);
-       real.shutdown(sfd, SHUT_RDWR);
-       real.close(sfd);
--      fd_store(socket, dfd, fd_rsocket);
-+      fd_store(socket, dfd, fd_rsocket, fd_ready);
- lclose:
-       rclose(lfd);
-@@ -553,7 +580,7 @@ sclose:
-       sem_close(sem);
- out:
-       if (ret)
--              fd_store(socket, sfd, fd_normal);
-+              fd_store(socket, sfd, fd_normal, fd_ready);
- }
- static inline enum fd_type fd_fork_get(int index, int *fd)
-@@ -577,10 +604,7 @@ int connect(int socket, const struct sockaddr *addr, socklen_t addrlen)
- {
-       int fd, ret;
--      switch (fd_get(socket, &fd)) {
--      case fd_fork:
--              return fork_active(socket, addr, addrlen);
--      case fd_rsocket:
-+      if (fd_get(socket, &fd) == fd_rsocket) {
-               ret = rconnect(fd, addr, addrlen);
-               if (!ret || errno == EINPROGRESS)
-                       return ret;
-@@ -591,12 +615,9 @@ int connect(int socket, const struct sockaddr *addr, socklen_t addrlen)
-               rclose(fd);
-               fd = ret;
--              break;
--      default:
--              break;
-+      } else {
-+              return real.connect(fd, addr, addrlen);
-       }
--
--      return real.connect(fd, addr, addrlen);
- }
- ssize_t recv(int socket, void *buf, size_t len, int flags)