From 334ae8703d12bb0da067a803797984cf91774193 Mon Sep 17 00:00:00 2001 From: Sean Hefty Date: Mon, 23 Jul 2012 12:35:44 -0700 Subject: [PATCH] refresh (create temporary patch) --- meta | 5 +- patches/refresh-temp | 175 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 178 insertions(+), 2 deletions(-) create mode 100644 patches/refresh-temp diff --git a/meta b/meta index 03e94485..53f373b0 100644 --- a/meta +++ b/meta @@ -1,6 +1,6 @@ Version: 1 -Previous: ee002f02400a83a5912575a161920765dc4def85 -Head: 90f61d3079894915082ed164f71d54b21aa5a289 +Previous: bf8339067226b23200eba0ab89b906251779cf88 +Head: 77bd90142d4369fbf22b0f6cf70ab4ad26f2106c Applied: rm-ib-var: 63a728f303f78348ad9727c46ac3e271197dace4 cma-rm-pd: 2ffda7f2991395570b9e776ff5ae256ca9684771 @@ -8,6 +8,7 @@ Applied: fork: 1768d762d8a2100e5250234ddf080b722a5e582f rstream-fork: 2724e02d5b461f8c580249461271de0f7acefcab fork-xfer: 90f61d3079894915082ed164f71d54b21aa5a289 + refresh-temp: 77bd90142d4369fbf22b0f6cf70ab4ad26f2106c Unapplied: dbg: 3ec7b3dd2db8422fd840e3cee062c629e7b8f5b6 waitall-buggy: c49c6b56c55385774065f5aa2704078e6ae0ceb8 diff --git a/patches/refresh-temp b/patches/refresh-temp new file mode 100644 index 00000000..a2da919c --- /dev/null +++ b/patches/refresh-temp @@ -0,0 +1,175 @@ +Bottom: 64f842716d428bde944b1d88a9c26dc0d4dbd189 +Top: 701bfad47cfeefb22f51e3977fe3629945359257 +Author: Sean Hefty +Date: 2012-07-23 12:35:44 -0700 + +Refresh of fork-xfer + +--- + +diff --git a/src/preload.c b/src/preload.c +index 7086997..82a4125 100644 +--- a/src/preload.c ++++ b/src/preload.c +@@ -493,7 +493,7 @@ static int fork_active(int socket, const struct sockaddr *addr, socklen_t addrle + return rconnect(ret, addr, addrlen); + } + +-static int fork_passive(int socket) ++static void fork_passive(int socket) + { + struct sockaddr_in6 sin6; + sem_t *sem; +@@ -501,6 +501,8 @@ static int fork_passive(int socket) + socklen_t len; + uint32_t msg; + ++ fd_get(socket, &sfd); ++ + len = sizeof sin6; + ret = real.getsockname(sfd, (struct sockaddr *) &sin6, &len); + if (ret) +@@ -510,12 +512,16 @@ static int fork_passive(int socket) + + sem = sem_open("/rsocket_fork", O_CREAT | O_RDWR, + S_IRWXU | S_IRWXG, 1); +- if (sem == SEM_FAILED) ++ if (sem == SEM_FAILED) { ++ ret = -1; + goto out; ++ } + + lfd = rsocket(sin6.sin6_family, SOCK_STREAM, 0); +- if (lfd < 0) ++ if (lfd < 0) { ++ ret = lfd; + goto sclose; ++ } + + param = 1; + rsetsockopt(lfd, SOL_SOCKET, SO_REUSEADDR, ¶m, sizeof param); +@@ -535,8 +541,10 @@ static int fork_passive(int socket) + goto lclose; + + dfd = raccept(lfd, NULL, NULL); +- if (dfd < 0) ++ if (dfd < 0) { ++ ret = dfd; + goto lclose; ++ } + + param = 1; + rsetsockopt(dfd, IPPROTO_TCP, TCP_NODELAY, ¶m, sizeof param); +@@ -555,7 +563,23 @@ sclose: + out: + if (ret) + fd_store(socket, sfd, fd_normal); +- return ret; ++} ++ ++static inline enum fd_type fd_fork_get(int index, int *fd) ++{ ++ struct fd_info *fdi; ++ ++ fdi = idm_lookup(&idm, index); ++ if (fdi) { ++ if (fdi->type == fd_fork) ++ fork_passive(index); ++ *fd = fdi->fd; ++ return fdi->type; ++ ++ } else { ++ *fd = index; ++ return fd_normal; ++ } + } + + int connect(int socket, const struct sockaddr *addr, socklen_t addrlen) +@@ -591,7 +615,7 @@ int connect(int socket, const struct sockaddr *addr, socklen_t addrlen) + ssize_t recv(int socket, void *buf, size_t len, int flags) + { + int fd; +- return (fd_get(socket, &fd) == fd_rsocket) ? ++ return (fd_fork_get(socket, &fd) == fd_rsocket) ? + rrecv(fd, buf, len, flags) : real.recv(fd, buf, len, flags); + } + +@@ -599,7 +623,7 @@ ssize_t recvfrom(int socket, void *buf, size_t len, int flags, + struct sockaddr *src_addr, socklen_t *addrlen) + { + int fd; +- return (fd_get(socket, &fd) == fd_rsocket) ? ++ return (fd_fork_get(socket, &fd) == fd_rsocket) ? + rrecvfrom(fd, buf, len, flags, src_addr, addrlen) : + real.recvfrom(fd, buf, len, flags, src_addr, addrlen); + } +@@ -607,7 +631,7 @@ ssize_t recvfrom(int socket, void *buf, size_t len, int flags, + ssize_t recvmsg(int socket, struct msghdr *msg, int flags) + { + int fd; +- return (fd_get(socket, &fd) == fd_rsocket) ? ++ return (fd_fork_get(socket, &fd) == fd_rsocket) ? + rrecvmsg(fd, msg, flags) : real.recvmsg(fd, msg, flags); + } + +@@ -615,7 +639,7 @@ ssize_t read(int socket, void *buf, size_t count) + { + int fd; + init_preload(); +- return (fd_get(socket, &fd) == fd_rsocket) ? ++ return (fd_fork_get(socket, &fd) == fd_rsocket) ? + rread(fd, buf, count) : real.read(fd, buf, count); + } + +@@ -623,14 +647,14 @@ ssize_t readv(int socket, const struct iovec *iov, int iovcnt) + { + int fd; + init_preload(); +- return (fd_get(socket, &fd) == fd_rsocket) ? ++ return (fd_fork_get(socket, &fd) == fd_rsocket) ? + rreadv(fd, iov, iovcnt) : real.readv(fd, iov, iovcnt); + } + + ssize_t send(int socket, const void *buf, size_t len, int flags) + { + int fd; +- return (fd_get(socket, &fd) == fd_rsocket) ? ++ return (fd_fork_get(socket, &fd) == fd_rsocket) ? + rsend(fd, buf, len, flags) : real.send(fd, buf, len, flags); + } + +@@ -638,7 +662,7 @@ ssize_t sendto(int socket, const void *buf, size_t len, int flags, + const struct sockaddr *dest_addr, socklen_t addrlen) + { + int fd; +- return (fd_get(socket, &fd) == fd_rsocket) ? ++ return (fd_fork_get(socket, &fd) == fd_rsocket) ? + rsendto(fd, buf, len, flags, dest_addr, addrlen) : + real.sendto(fd, buf, len, flags, dest_addr, addrlen); + } +@@ -646,7 +670,7 @@ ssize_t sendto(int socket, const void *buf, size_t len, int flags, + ssize_t sendmsg(int socket, const struct msghdr *msg, int flags) + { + int fd; +- return (fd_get(socket, &fd) == fd_rsocket) ? ++ return (fd_fork_get(socket, &fd) == fd_rsocket) ? + rsendmsg(fd, msg, flags) : real.sendmsg(fd, msg, flags); + } + +@@ -654,7 +678,7 @@ ssize_t write(int socket, const void *buf, size_t count) + { + int fd; + init_preload(); +- return (fd_get(socket, &fd) == fd_rsocket) ? ++ return (fd_fork_get(socket, &fd) == fd_rsocket) ? + rwrite(fd, buf, count) : real.write(fd, buf, count); + } + +@@ -662,7 +686,7 @@ ssize_t writev(int socket, const struct iovec *iov, int iovcnt) + { + int fd; + init_preload(); +- return (fd_get(socket, &fd) == fd_rsocket) ? ++ return (fd_fork_get(socket, &fd) == fd_rsocket) ? + rwritev(fd, iov, iovcnt) : real.writev(fd, iov, iovcnt); + } -- 2.41.0