Version: 1
-Previous: 9e3b8e99f67e95c4f38b158c8c77379d3ec449db
-Head: 8c650d7a0e10582928f0fd3e5d9e045a84fc0b66
+Previous: 7b5ed8f3aa4c981d0fd5d588c01ab246724c5bbc
+Head: 6d2d228c1827b30af934bc63121140282c3b3282
Applied:
real-close: 3409f8d6af187d25c63a5d1f8ee8bff5f14555e2
dup2: ca5813e7cf95dee5933fc417e4a34d26f2b01824
oobinline: ac51c1095f505373a6ec54b8f1d990259fb34d97
fork-connect: 8c650d7a0e10582928f0fd3e5d9e045a84fc0b66
+ refresh-temp: 6d2d228c1827b30af934bc63121140282c3b3282
Unapplied:
dbg-out: 04273ee712db4d53efb390462c1b738bb54a57df
fstat: a62c653906870422edef5f6388dac9f76c953e35
--- /dev/null
+Bottom: 216390f24bdb1fa45d9326571f8dd46b1fd804ef
+Top: 64baa18c546931a07eef988a8d6bdef26a73feab
+Author: Sean Hefty <sean.hefty@intel.com>
+Date: 2012-08-10 22:13:06 -0700
+
+Refresh of fork-connect
+
+---
+
+diff --git a/src/preload.c b/src/preload.c
+index c61d092..e5d3fcb 100644
+--- a/src/preload.c
++++ b/src/preload.c
+@@ -436,9 +436,15 @@ int bind(int socket, const struct sockaddr *addr, socklen_t addrlen)
+
+ int listen(int socket, int backlog)
+ {
+- int fd;
+- return (fd_get(socket, &fd) == fd_rsocket) ?
+- rlisten(fd, backlog) : real.listen(fd, backlog);
++ int fd, ret;
++ if (fd_get(socket, &fd) == fd_rsocket) {
++ ret = rlisten(fd, backlog);
++ } else {
++ ret = real.listen(fd, backlog);
++ if (!ret && fd_gets(socket) == fd_fork)
++ fd_store(socket, fd, fd_normal, fd_fork_listen);
++ }
++ return ret;
+ }
+
+ int accept(int socket, struct sockaddr *addr, socklen_t *addrlen)
+@@ -589,8 +595,10 @@ static inline enum fd_type fd_fork_get(int index, int *fd)
+
+ fdi = idm_lookup(&idm, index);
+ if (fdi) {
+- if (fdi->type == fd_fork)
++ if (fdi->type == fd_fork_passive)
+ fork_passive(index);
++ else if (fdi->type == fd_fork_active)
++ fork_active(index);
+ *fd = fdi->fd;
+ return fdi->type;
+
+@@ -616,6 +624,7 @@ int connect(int socket, const struct sockaddr *addr, socklen_t addrlen)
+ rclose(fd);
+ fd = ret;
+ } else {
++ /* Set state to fork_active if nonblocking. if blocking fork_active */
+ return real.connect(fd, addr, addrlen);
+ }
+ }