]> git.openfabrics.org - ~shefty/librdmacm.git/commitdiff
refresh (create temporary patch)
authorSean Hefty <sean.hefty@intel.com>
Tue, 17 Jul 2012 19:34:22 +0000 (12:34 -0700)
committerSean Hefty <sean.hefty@intel.com>
Tue, 17 Jul 2012 19:34:22 +0000 (12:34 -0700)
meta
patches/refresh-temp [new file with mode: 0644]

diff --git a/meta b/meta
index d4468ee6d5afd875f4d4d3c2825133fff3a4a53b..073ec6a27a3857aaf502b96815b779390646f9f4 100644 (file)
--- a/meta
+++ b/meta
@@ -1,9 +1,10 @@
 Version: 1
-Previous: 9ef6e320c8759f17a5e6f26bd19c2837daa09228
-Head: b131326fd7cad28cd3b9a3d09c29c9476d7fddb0
+Previous: 522ddb4fa21524c0f00148e1312e808d29de7f86
+Head: aaef2b3382a3bb7a45d12dfcf61dbe5f8114be6f
 Applied:
   transpose: 84e0beee0d2d3c217cd9703b9e438d25856cacb6
   fork: b131326fd7cad28cd3b9a3d09c29c9476d7fddb0
+  refresh-temp: aaef2b3382a3bb7a45d12dfcf61dbe5f8114be6f
 Unapplied:
   waitall-buggy: c49c6b56c55385774065f5aa2704078e6ae0ceb8
   rs-1sge: 8ec392829399dec7ed5c608b8697a482e5faa2de
diff --git a/patches/refresh-temp b/patches/refresh-temp
new file mode 100644 (file)
index 0000000..efba49c
--- /dev/null
@@ -0,0 +1,94 @@
+Bottom: 3ef5d9a598c00e66ce2beafac99c914e0942c3c3
+Top:    89b109b9172f2fd26f7feaca314718e1127b4e64
+Author: Sean Hefty <sean.hefty@intel.com>
+Date:   2012-07-17 12:34:22 -0700
+
+Refresh of fork
+
+---
+
+diff --git a/src/preload.c b/src/preload.c
+index 5860a4c..1d76df9 100644
+--- a/src/preload.c
++++ b/src/preload.c
+@@ -818,40 +818,68 @@ int fcntl(int socket, int cmd, ... /* arg */)
+ pid_t fork(void)
+ {
+       struct sockaddr_storage sa;
++      struct sockaddr_in6 sin6;
+       pid_t pid;
+       sem_t *sem;
+-      int fd, lfd, newfd, ret, len, param;
++      int lfd, sfd, dfd, ret, len, param;
+       uint32_t msg;
+       init_preload();
+       pid = real.fork();
+       if (pid || !fork_support || (last_accept < 0) ||
+-          (fd_get(last_accept, &fd) != fd_fork))
++          (fd_get(last_accept, &sfd) != fd_fork))
+               goto out;
++      len = sizeof sa;
++      ret = real.getsockname(sfd, &sa, &len);
++      if (ret)
++              goto out;
++      sin6.sin6_family = sa.ss_family;
++      sin6.sin6_port = ((struct sockaddr_in6 *) &sa)->sin6_port;
++
+       sem = sem_open("/rsocket_fork", O_CREAT, 0644, 1);
+       if (sem == SEM_FAILED)
+               goto out;
+-      lfd = transpose_socket(last_accept, fd_rsocket);
++      lfd = rsocket(sa.ss_family, SOCK_STREAM, 0);
+       if (lfd < 0)
+-              goto out;
++              goto sclose;
+       param = 1;
+-      len = sizeof param;
+-      rsetsockopt(lfd, SOL_SOCKET, SO_REUSEADDR, &param, len);
++      rsetsockopt(lfd, SOL_SOCKET, SO_REUSEADDR, &param, sizeof param);
+-      len = sizeof sa;
+-      ret = real.getsockname(fd, &sa, &len);
++      sem_wait(sem);
++      ret = rbind(lfd, &sin6, sizeof sin6);
+       if (ret)
+-              goto out;
++              goto lclose;
+-      sem_wait(sem);
+-      ret = rbind()
++      ret = rlisten(lfd, 1);
++      if (ret)
++              goto lclose;
+-      real.close(fd);
++      dfd = raccept(lfd, NULL, NULL);
++      if (dfd < 0)
++              goto lclose;
++
++      param = 1;
++      rsetsockopt(dfd, IPPROTO_TCP, TCP_NODELAY, &param, sizeof param);
++
++      msg = 0;
++      ret = real.write(sfd, &msg, sizeof msg);
++      if (ret != sizeof msg) {
++              rclose(dfd);
++              goto lclose;
++      }
++
++      copysockopts(dfd, sfd, &rs, &real);
++      real.shutdown(sfd, SHUT_RDWR);
++      real.close(sfd);
++      fd_store(last_accept, dfd, fd_rsocket);
++lclose:
++      rclose(lfd);
+       sem_post(sem);
++sclose:
+       sem_close(sem);
+ out:
+       last_accept = -1;