]> git.openfabrics.org - ~shefty/librdmacm.git/commitdiff
refresh
authorSean Hefty <sean.hefty@intel.com>
Mon, 6 Aug 2012 22:06:18 +0000 (15:06 -0700)
committerSean Hefty <sean.hefty@intel.com>
Mon, 6 Aug 2012 22:06:18 +0000 (15:06 -0700)
meta
patches/dup2
patches/refresh-temp [deleted file]

diff --git a/meta b/meta
index e9dc01cc7f5e8c35b9d778b7cc8c7263b0a065e7..134d6819dc66dc1cea41c1b007e3baf3193bb688 100644 (file)
--- a/meta
+++ b/meta
@@ -1,10 +1,9 @@
 Version: 1
-Previous: 116a8edd3fb819a75aefb33abedca70ee92ed897
-Head: b84021e12362153bf1d5248926bb2f153870eb37
+Previous: 9e45adc3eba919227fcf0b8eff2b42c2183391c7
+Head: 8eb7731f3f456a7de7a2e72862ea090601e7856f
 Applied:
   real-close: 3409f8d6af187d25c63a5d1f8ee8bff5f14555e2
-  dup2: 02f124a4ba5b3530bbce5cfbe28a343cd1b54260
-  refresh-temp: b84021e12362153bf1d5248926bb2f153870eb37
+  dup2: 8eb7731f3f456a7de7a2e72862ea090601e7856f
 Unapplied:
   dbg: 0c269855776d3001e37da8c8afe283c20e1d6cd6
   waitall-buggy: c49c6b56c55385774065f5aa2704078e6ae0ceb8
index f7d04c0a9dad1181d52a049b5a46fe16a4765cba..7134637d60d09e1b01918dc2dd034da106490fa3 100644 (file)
@@ -1,5 +1,5 @@
 Bottom: c4f9e56fde30641b69e81060e3981b0df33f49c2
-Top:    1ba59f6f7d9886c4ce5b8aa5fa06f770d53b8bf2
+Top:    7b4509e39407700f2b83499e2db1b89ccde97650
 Author: Sean Hefty <sean.hefty@intel.com>
 Date:   2012-07-30 16:06:32 -0700
 
@@ -65,7 +65,7 @@ index cedc0c3..6c3df27 100644
  int ucma_max_qpsize(struct rdma_cm_id *id);
  int ucma_complete(struct rdma_cm_id *id);
 diff --git a/src/preload.c b/src/preload.c
-index a680143..b716e66 100644
+index a680143..ff7d2d0 100644
 --- a/src/preload.c
 +++ b/src/preload.c
 @@ -83,6 +83,7 @@ struct socket_calls {
@@ -80,21 +80,22 @@ index a680143..b716e66 100644
  struct fd_info {
        enum fd_type type;
        int fd;
-+      struct fd_info *dupfdi;
++      int dupfd;
 +      atomic_t refcnt;
  };
  
  static int fd_open(void)
-@@ -122,6 +125,8 @@ static int fd_open(void)
+@@ -122,6 +125,9 @@ static int fd_open(void)
                goto err1;
        }
  
++      fdi->dupfd = -1;
 +      atomic_init(&fdi->refcnt);
 +      atomic_set(&fdi->refcnt, 1);
        pthread_mutex_lock(&mut);
        ret = idm_set(&idm, index, fdi);
        pthread_mutex_unlock(&mut);
-@@ -252,6 +257,7 @@ static void init_preload(void)
+@@ -252,6 +258,7 @@ static void init_preload(void)
        real.setsockopt = dlsym(RTLD_NEXT, "setsockopt");
        real.getsockopt = dlsym(RTLD_NEXT, "getsockopt");
        real.fcntl = dlsym(RTLD_NEXT, "fcntl");
@@ -102,7 +103,37 @@ index a680143..b716e66 100644
  
        rs.socket = dlsym(RTLD_DEFAULT, "rsocket");
        rs.bind = dlsym(RTLD_DEFAULT, "rbind");
-@@ -886,3 +892,45 @@ int fcntl(int socket, int cmd, ... /* arg */)
+@@ -807,9 +814,27 @@ int shutdown(int socket, int how)
+ int close(int socket)
+ {
+-      int fd;
++      struct fd_info *fdi;
++
+       init_preload();
+-      return (fd_close(socket, &fd) == fd_rsocket) ? rclose(fd) : real.close(fd);
++      fdi = idm_lookup(&idm, socket);
++      if (!fdi)
++              return real.close(socket);
++
++      if (fdi->dupfd != -1) {
++              ret = close(fdi->dupfd);
++              if (ret)
++                      return ret;
++      }
++
++      if (atomic_dec(&fdi->refcnt))
++              return 0;
++
++      idm_clear(&idm, socket);
++      real.close(socket);
++      ret = (fdi->type == fd_rsocket) ? rclose(fdi->fd) : real.close(fdi->fd);
++      free(fdi);
++      return ret;
+ }
+ int getpeername(int socket, struct sockaddr *addr, socklen_t *addrlen)
+@@ -886,3 +911,48 @@ int fcntl(int socket, int cmd, ... /* arg */)
        va_end(args);
        return ret;
  }
@@ -138,11 +169,14 @@ index a680143..b716e66 100644
 +      idm_set(&idm, newfd, newfdi);
 +      pthread_mutex_unlock(&mut);
 +
-+      if (oldfdi->dupfdi)
-+              oldfdi = oldfdi->dupfdi;
 +      newfdi->fd = oldfdi->fd;
 +      newfdi->type = oldfdi->type;
-+      newfdi->dupfdi = oldfdi;
++      if (oldfdi->dupfd != -1) {
++              newfdi->dupfd = oldfdi->dupfd;
++              oldfdi = idm_lookup(&idm, oldfdi->dupfd);
++      } else {
++              newfdi->dupfd = oldfd;
++      }
 +      atomic_init(&newfdi->refcnt);
 +      atomic_set(&newfdi->refcnt, 1);
 +      atomic_inc(&oldfdi->refcnt);
diff --git a/patches/refresh-temp b/patches/refresh-temp
deleted file mode 100644 (file)
index 923b69f..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-Bottom: 1ba59f6f7d9886c4ce5b8aa5fa06f770d53b8bf2
-Top:    7b4509e39407700f2b83499e2db1b89ccde97650
-Author: Sean Hefty <sean.hefty@intel.com>
-Date:   2012-08-06 15:06:17 -0700
-
-Refresh of dup2
-
----
-
-diff --git a/src/preload.c b/src/preload.c
-index b716e66..ff7d2d0 100644
---- a/src/preload.c
-+++ b/src/preload.c
-@@ -106,7 +106,7 @@ enum fd_type {
- struct fd_info {
-       enum fd_type type;
-       int fd;
--      struct fd_info *dupfdi;
-+      int dupfd;
-       atomic_t refcnt;
- };
-@@ -125,6 +125,7 @@ static int fd_open(void)
-               goto err1;
-       }
-+      fdi->dupfd = -1;
-       atomic_init(&fdi->refcnt);
-       atomic_set(&fdi->refcnt, 1);
-       pthread_mutex_lock(&mut);
-@@ -813,9 +814,27 @@ int shutdown(int socket, int how)
- int close(int socket)
- {
--      int fd;
-+      struct fd_info *fdi;
-+
-       init_preload();
--      return (fd_close(socket, &fd) == fd_rsocket) ? rclose(fd) : real.close(fd);
-+      fdi = idm_lookup(&idm, socket);
-+      if (!fdi)
-+              return real.close(socket);
-+
-+      if (fdi->dupfd != -1) {
-+              ret = close(fdi->dupfd);
-+              if (ret)
-+                      return ret;
-+      }
-+
-+      if (atomic_dec(&fdi->refcnt))
-+              return 0;
-+
-+      idm_clear(&idm, socket);
-+      real.close(socket);
-+      ret = (fdi->type == fd_rsocket) ? rclose(fdi->fd) : real.close(fdi->fd);
-+      free(fdi);
-+      return ret;
- }
- int getpeername(int socket, struct sockaddr *addr, socklen_t *addrlen)
-@@ -924,11 +943,14 @@ int dup2(int oldfd, int newfd)
-       idm_set(&idm, newfd, newfdi);
-       pthread_mutex_unlock(&mut);
--      if (oldfdi->dupfdi)
--              oldfdi = oldfdi->dupfdi;
-       newfdi->fd = oldfdi->fd;
-       newfdi->type = oldfdi->type;
--      newfdi->dupfdi = oldfdi;
-+      if (oldfdi->dupfd != -1) {
-+              newfdi->dupfd = oldfdi->dupfd;
-+              oldfdi = idm_lookup(&idm, oldfdi->dupfd);
-+      } else {
-+              newfdi->dupfd = oldfd;
-+      }
-       atomic_init(&newfdi->refcnt);
-       atomic_set(&newfdi->refcnt, 1);
-       atomic_inc(&oldfdi->refcnt);