Version: 1
-Previous: 1ac406fd9ba3cea33b987ab75134faf544a9be37
-Head: 85b4b437b6341c6acd121da7280c838adc79549a
+Previous: 3c50300188929e24f89589e0951b6ff1f93defa3
+Head: 20acee2d0dd47800dbff3247882ff87589bc28df
Applied:
fork: 85b4b437b6341c6acd121da7280c838adc79549a
+ refresh-temp: 20acee2d0dd47800dbff3247882ff87589bc28df
Unapplied:
waitall-buggy: c49c6b56c55385774065f5aa2704078e6ae0ceb8
rs-1sge: 8ec392829399dec7ed5c608b8697a482e5faa2de
--- /dev/null
+Bottom: 7ec243f3149e9a1ff1d5183f18e30d2458e354d6
+Top: 38d73276ff33c48f81d135b5e5b1c3a0963111e6
+Author: Sean Hefty <sean.hefty@intel.com>
+Date: 2012-07-13 16:50:02 -0700
+
+Refresh of fork
+
+---
+
+diff --git a/src/preload.c b/src/preload.c
+index 2750b30..50430f7 100644
+--- a/src/preload.c
++++ b/src/preload.c
+@@ -92,10 +92,12 @@ static pthread_mutex_t mut = PTHREAD_MUTEX_INITIALIZER;
+ static int sq_size;
+ static int rq_size;
+ static int sq_inline;
++static int fork_support;
+
+ enum fd_type {
+ fd_normal,
+- fd_rsocket
++ fd_rsocket,
++ fd_fork
+ };
+
+ struct fd_info {
+@@ -207,6 +209,10 @@ void getenv_options(void)
+ var = getenv("RS_INLINE");
+ if (var)
+ sq_inline = atoi(var);
++
++ var = getenv("RS_FORK");
++ if (var)
++ fork_support = atoi(var);
+ }
+
+ static void init_preload(void)
+@@ -332,8 +338,16 @@ int socket(int domain, int type, int protocol)
+ ret = rsocket(domain, type, protocol);
+ recursive = 0;
+ if (ret >= 0) {
+- fd_store(index, ret, fd_rsocket);
+- set_rsocket_options(ret);
++ if (fork_support) {
++ rclose(ret);
++ ret = real_socket(domain, type, protocol);
++ if (ret < 0)
++ return ret;
++ fd_store(index, ret, fd_fork);
++ } else {
++ fd_store(index, ret, fd_rsocket);
++ set_rsocket_options(ret);
++ }
+ return index;
+ }
+ fd_close(index, &ret);