From: Sean Hefty Date: Mon, 16 Jul 2012 22:50:21 +0000 (-0700) Subject: refresh X-Git-Url: https://openfabrics.org/gitweb/?a=commitdiff_plain;h=a37507c20480e893feceb62a8b56c75470098591;p=~shefty%2Flibrdmacm.git refresh --- diff --git a/meta b/meta index e22da2b9..3ea4c37f 100644 --- a/meta +++ b/meta @@ -1,9 +1,8 @@ Version: 1 -Previous: 7ef87e495323c8ece7deaf0519a47506a66f35dd -Head: e10524a237af6362e2b5c009d12393878880e79f +Previous: 4999565e175b460c7eee1f50d26b74c3e37cb3a7 +Head: 28dd0f4ee0200748f8d4b27ea1c904402be9af4e Applied: - transpose: 4c834bc154a73e7edd6dd4a912933958ca142d8d - refresh-temp: e10524a237af6362e2b5c009d12393878880e79f + transpose: 28dd0f4ee0200748f8d4b27ea1c904402be9af4e Unapplied: fork: 454d730c27cbe7efcf9927edc0826f7f833fb95f waitall-buggy: c49c6b56c55385774065f5aa2704078e6ae0ceb8 diff --git a/patches/refresh-temp b/patches/refresh-temp deleted file mode 100644 index 77d016d9..00000000 --- a/patches/refresh-temp +++ /dev/null @@ -1,483 +0,0 @@ -Bottom: 454cf9a1db769bb4bf7d2c1d4b95f0a992a0aafa -Top: 19f8849f48737cbf50102511ff14a78d39040f12 -Author: Sean Hefty -Date: 2012-07-16 15:50:21 -0700 - -Refresh of transpose - ---- - -diff --git a/src/preload.c b/src/preload.c -index 0d457bf..14b09b8 100644 ---- a/src/preload.c -+++ b/src/preload.c -@@ -53,38 +53,38 @@ - #include "cma.h" - #include "indexer.h" - --static int (*real_socket)(int domain, int type, int protocol); --static int (*real_bind)(int socket, const struct sockaddr *addr, -- socklen_t addrlen); --static int (*real_listen)(int socket, int backlog); --static int (*real_accept)(int socket, struct sockaddr *addr, -- socklen_t *addrlen); --static int (*real_connect)(int socket, const struct sockaddr *addr, -- socklen_t addrlen); --static ssize_t (*real_recv)(int socket, void *buf, size_t len, int flags); --static ssize_t (*real_recvfrom)(int socket, void *buf, size_t len, int flags, -- struct sockaddr *src_addr, socklen_t *addrlen); --static ssize_t (*real_recvmsg)(int socket, struct msghdr *msg, int flags); --static ssize_t (*real_read)(int socket, void *buf, size_t count); --static ssize_t (*real_readv)(int socket, const struct iovec *iov, int iovcnt); --static ssize_t (*real_send)(int socket, const void *buf, size_t len, int flags); --static ssize_t (*real_sendto)(int socket, const void *buf, size_t len, int flags, -- const struct sockaddr *dest_addr, socklen_t addrlen); --static ssize_t (*real_sendmsg)(int socket, const struct msghdr *msg, int flags); --static ssize_t (*real_write)(int socket, const void *buf, size_t count); --static ssize_t (*real_writev)(int socket, const struct iovec *iov, int iovcnt); --static int (*real_poll)(struct pollfd *fds, nfds_t nfds, int timeout); --static int (*real_shutdown)(int socket, int how); --static int (*real_close)(int socket); --static int (*real_getpeername)(int socket, struct sockaddr *addr, -- socklen_t *addrlen); --static int (*real_getsockname)(int socket, struct sockaddr *addr, -- socklen_t *addrlen); --static int (*real_setsockopt)(int socket, int level, int optname, -- const void *optval, socklen_t optlen); --static int (*real_getsockopt)(int socket, int level, int optname, -- void *optval, socklen_t *optlen); --static int (*real_fcntl)(int socket, int cmd, ... /* arg */); -+struct socket_calls { -+ int (*socket)(int domain, int type, int protocol); -+ int (*bind)(int socket, const struct sockaddr *addr, socklen_t addrlen); -+ int (*listen)(int socket, int backlog); -+ int (*accept)(int socket, struct sockaddr *addr, socklen_t *addrlen); -+ int (*connect)(int socket, const struct sockaddr *addr, socklen_t addrlen); -+ ssize_t (*recv)(int socket, void *buf, size_t len, int flags); -+ ssize_t (*recvfrom)(int socket, void *buf, size_t len, int flags, -+ struct sockaddr *src_addr, socklen_t *addrlen); -+ ssize_t (*recvmsg)(int socket, struct msghdr *msg, int flags); -+ ssize_t (*read)(int socket, void *buf, size_t count); -+ ssize_t (*readv)(int socket, const struct iovec *iov, int iovcnt); -+ ssize_t (*send)(int socket, const void *buf, size_t len, int flags); -+ ssize_t (*sendto)(int socket, const void *buf, size_t len, int flags, -+ const struct sockaddr *dest_addr, socklen_t addrlen); -+ ssize_t (*sendmsg)(int socket, const struct msghdr *msg, int flags); -+ ssize_t (*write)(int socket, const void *buf, size_t count); -+ ssize_t (*writev)(int socket, const struct iovec *iov, int iovcnt); -+ int (*poll)(struct pollfd *fds, nfds_t nfds, int timeout); -+ int (*shutdown)(int socket, int how); -+ int (*close)(int socket); -+ int (*getpeername)(int socket, struct sockaddr *addr, socklen_t *addrlen); -+ int (*getsockname)(int socket, struct sockaddr *addr, socklen_t *addrlen); -+ int (*setsockopt)(int socket, int level, int optname, -+ const void *optval, socklen_t optlen); -+ int (*getsockopt)(int socket, int level, int optname, -+ void *optval, socklen_t *optlen); -+ int (*fcntl)(int socket, int cmd, ... /* arg */); -+}; -+ -+static struct socket_calls real; -+static struct socket_calls rs; - - static struct index_map idm; - static pthread_mutex_t mut = PTHREAD_MUTEX_INITIALIZER; -@@ -221,29 +221,53 @@ static void init_preload(void) - if (init) - goto out; - -- real_socket = dlsym(RTLD_NEXT, "socket"); -- real_bind = dlsym(RTLD_NEXT, "bind"); -- real_listen = dlsym(RTLD_NEXT, "listen"); -- real_accept = dlsym(RTLD_NEXT, "accept"); -- real_connect = dlsym(RTLD_NEXT, "connect"); -- real_recv = dlsym(RTLD_NEXT, "recv"); -- real_recvfrom = dlsym(RTLD_NEXT, "recvfrom"); -- real_recvmsg = dlsym(RTLD_NEXT, "recvmsg"); -- real_read = dlsym(RTLD_NEXT, "read"); -- real_readv = dlsym(RTLD_NEXT, "readv"); -- real_send = dlsym(RTLD_NEXT, "send"); -- real_sendto = dlsym(RTLD_NEXT, "sendto"); -- real_sendmsg = dlsym(RTLD_NEXT, "sendmsg"); -- real_write = dlsym(RTLD_NEXT, "write"); -- real_writev = dlsym(RTLD_NEXT, "writev"); -- real_poll = dlsym(RTLD_NEXT, "poll"); -- real_shutdown = dlsym(RTLD_NEXT, "shutdown"); -- real_close = dlsym(RTLD_NEXT, "close"); -- real_getpeername = dlsym(RTLD_NEXT, "getpeername"); -- real_getsockname = dlsym(RTLD_NEXT, "getsockname"); -- real_setsockopt = dlsym(RTLD_NEXT, "setsockopt"); -- real_getsockopt = dlsym(RTLD_NEXT, "getsockopt"); -- real_fcntl = dlsym(RTLD_NEXT, "fcntl"); -+ real.socket = dlsym(RTLD_NEXT, "socket"); -+ real.bind = dlsym(RTLD_NEXT, "bind"); -+ real.listen = dlsym(RTLD_NEXT, "listen"); -+ real.accept = dlsym(RTLD_NEXT, "accept"); -+ real.connect = dlsym(RTLD_NEXT, "connect"); -+ real.recv = dlsym(RTLD_NEXT, "recv"); -+ real.recvfrom = dlsym(RTLD_NEXT, "recvfrom"); -+ real.recvmsg = dlsym(RTLD_NEXT, "recvmsg"); -+ real.read = dlsym(RTLD_NEXT, "read"); -+ real.readv = dlsym(RTLD_NEXT, "readv"); -+ real.send = dlsym(RTLD_NEXT, "send"); -+ real.sendto = dlsym(RTLD_NEXT, "sendto"); -+ real.sendmsg = dlsym(RTLD_NEXT, "sendmsg"); -+ real.write = dlsym(RTLD_NEXT, "write"); -+ real.writev = dlsym(RTLD_NEXT, "writev"); -+ real.poll = dlsym(RTLD_NEXT, "poll"); -+ real.shutdown = dlsym(RTLD_NEXT, "shutdown"); -+ real.close = dlsym(RTLD_NEXT, "close"); -+ real.getpeername = dlsym(RTLD_NEXT, "getpeername"); -+ real.getsockname = dlsym(RTLD_NEXT, "getsockname"); -+ real.setsockopt = dlsym(RTLD_NEXT, "setsockopt"); -+ real.getsockopt = dlsym(RTLD_NEXT, "getsockopt"); -+ real.fcntl = dlsym(RTLD_NEXT, "fcntl"); -+ -+ rs.socket = dlsym(RTLD_DEFAULT, "rsocket"); -+ rs.bind = dlsym(RTLD_DEFAULT, "rbind"); -+ rs.listen = dlsym(RTLD_DEFAULT, "rlisten"); -+ rs.accept = dlsym(RTLD_DEFAULT, "raccept"); -+ rs.connect = dlsym(RTLD_DEFAULT, "rconnect"); -+ rs.recv = dlsym(RTLD_DEFAULT, "rrecv"); -+ rs.recvfrom = dlsym(RTLD_DEFAULT, "rrecvfrom"); -+ rs.recvmsg = dlsym(RTLD_DEFAULT, "rrecvmsg"); -+ rs.read = dlsym(RTLD_DEFAULT, "rread"); -+ rs.readv = dlsym(RTLD_DEFAULT, "rreadv"); -+ rs.send = dlsym(RTLD_DEFAULT, "rsend"); -+ rs.sendto = dlsym(RTLD_DEFAULT, "rsendto"); -+ rs.sendmsg = dlsym(RTLD_DEFAULT, "rsendmsg"); -+ rs.write = dlsym(RTLD_DEFAULT, "rwrite"); -+ rs.writev = dlsym(RTLD_DEFAULT, "rwritev"); -+ rs.poll = dlsym(RTLD_DEFAULT, "rpoll"); -+ rs.shutdown = dlsym(RTLD_DEFAULT, "rshutdown"); -+ rs.close = dlsym(RTLD_DEFAULT, "rclose"); -+ rs.getpeername = dlsym(RTLD_DEFAULT, "rgetpeername"); -+ rs.getsockname = dlsym(RTLD_DEFAULT, "rgetsockname"); -+ rs.setsockopt = dlsym(RTLD_DEFAULT, "rsetsockopt"); -+ rs.getsockopt = dlsym(RTLD_DEFAULT, "rgetsockopt"); -+ rs.fcntl = dlsym(RTLD_DEFAULT, "rfcntl"); - - getenv_options(); - init = 1; -@@ -257,58 +281,62 @@ out: - * handle setting a few of the more common values. - */ - static int --transpose_socket(int index, int *fd, enum fd_type new_type, -- int (*socket_new)(int domain, int type, int protocol), -- int (*close_old)(int socket), -- int (*close_new)(int socket), -- int (*getsockname_old)(int socket, struct sockaddr *addr, -- socklen_t *addrlen), -- int (*getsockopt_old)(int socket, int level, int optname, -- void *optval, socklen_t *optlen), -- int (*setsockopt_new)(int socket, int level, int optname, -- const void *optval, socklen_t optlen), -- int (*fcntl_old)(int socket, int cmd, ... /* arg */), -- int (*fcntl_new)(int socket, int cmd, ... /* arg */)) -+transpose_socket(int index, int *fd, enum fd_type new_type) - { - socklen_t len = 0; - int new_fd, param, ret; - -- ret = getsockname_old(*fd, NULL, &len); -+ ret = new_type == fd_rsocket ? -+ real.getsockname(*fd, NULL, &len) : rgetsockname(*fd, NULL, &len); - if (ret) - return ret; - - param = (len == sizeof(struct sockaddr_in6)) ? PF_INET6 : PF_INET; -- new_fd = socket_new(param, SOCK_STREAM, 0); -+ new_fd = new_type == fd_rsocket ? -+ rsocket(param, SOCK_STREAM, 0) : socket(param, SOCK_STREAM, 0); - if (new_fd < 0) - return new_fd; - -- ret = fcntl_old(*fd, F_GETFL); -- if (ret > 0) -- ret = fcntl_new(new_fd, F_SETFL, ret); -+ ret = new_type == fd_rsocket ? -+ real.fcntl(*fd, F_GETFL) : rcntl(*fd, F_GETFL); -+ if (ret > 0) { -+ ret = new_type == fd_rsocket ? -+ rfcntl(new_fd, F_SETFL, ret) : real.fcntl(new_fd, F_SETFL, ret); -+ } - if (ret) - goto err; - - len = sizeof param; -- ret = getsockopt_old(*fd, SOL_SOCKET, SO_REUSEADDR, ¶m, &len); -- if (param && !ret) -- ret = setsockopt_new(new_fd, SOL_SOCKET, SO_REUSEADDR, ¶m, len); -+ ret = new_type == fd_rsocket ? -+ real.getsockopt(*fd, SOL_SOCKET, SO_REUSEADDR, ¶m, &len) : -+ rgetsockopt(*fd, SOL_SOCKET, SO_REUSEADDR, ¶m, &len); -+ if (param && !ret) { -+ ret = new_type == fd_rsocket ? -+ rsetsockopt(new_fd, SOL_SOCKET, SO_REUSEADDR, ¶m, len) : -+ real.setsockopt(new_fd, SOL_SOCKET, SO_REUSEADDR, ¶m, len); -+ } - if (ret) - goto err; - - len = sizeof param; -- ret = getsockopt_old(*fd, IPPROTO_TCP, TCP_NODELAY, ¶m, &len); -- if (param && !ret) -- ret = setsockopt_new(new_fd, IPPROTO_TCP, TCP_NODELAY, ¶m, len); -+ ret = new_type == fd_rsocket ? -+ real.getsockopt(*fd, IPPROTO_TCP, TCP_NODELAY, ¶m, &len) : -+ rgetsockopt(*fd, IPPROTO_TCP, TCP_NODELAY, ¶m, &len); -+ if (param && !ret) { -+ ret = new_type == fd_rsocket ? -+ rsetsockopt(new_fd, IPPROTO_TCP, TCP_NODELAY, ¶m, len) : -+ real.setsockopt(new_fd, IPPROTO_TCP, TCP_NODELAY, ¶m, len); -+ } - if (ret) - goto err; - -- close_old(*fd); -+ new_type == fd_rsocket ? rclose(*fd) : real.close(*fd); - fd_store(socket, new_fd, new_type); - *fd = new_fd; - return 0; - - err: -- close_new(new_fd); -+ new_type == fd_rsocket ? real.close(new_fd) : rclose(new_fd); - return ret; - } - -@@ -350,7 +378,7 @@ int socket(int domain, int type, int protocol) - } - fd_close(index, &ret); - real: -- return real_socket(domain, type, protocol); -+ return real.socket(domain, type, protocol); - } - - int bind(int socket, const struct sockaddr *addr, socklen_t addrlen) -@@ -363,22 +391,19 @@ int bind(int socket, const struct sockaddr *addr, socklen_t addrlen) - if (!sin->sin_port || ntohs(sin->sin_port) > 1024) - return rbind(fd, addr, addrlen); - -- ret = transpose_socket(socket, &fd, fd_normal, real_socket, -- rclose, real_close, rgetsockname, -- rgetsockopt, real_setsockopt, -- rfcntl, real_fcntl); -+ ret = transpose_socket(socket, &fd, fd_normal); - if (ret) - return ret; - } - -- return real_bind(fd, addr, addrlen); -+ return real.bind(fd, addr, addrlen); - } - - int listen(int socket, int backlog) - { - int fd; - return (fd_get(socket, &fd) == fd_rsocket) ? -- rlisten(fd, backlog) : real_listen(fd, backlog); -+ rlisten(fd, backlog) : real.listen(fd, backlog); - } - - int accept(int socket, struct sockaddr *addr, socklen_t *addrlen) -@@ -399,7 +424,7 @@ int accept(int socket, struct sockaddr *addr, socklen_t *addrlen) - fd_store(index, ret, fd_rsocket); - return index; - } else { -- return real_accept(fd, addr, addrlen); -+ return real.accept(fd, addr, addrlen); - } - } - -@@ -416,22 +441,19 @@ int connect(int socket, const struct sockaddr *addr, socklen_t addrlen) - return ret; - } - -- ret = transpose_socket(socket, &fd, fd_normal, real_socket, -- rclose, real_close, rgetsockname, -- rgetsockopt, real_setsockopt, -- rfcntl, real_fcntl); -+ ret = transpose_socket(socket, &fd, fd_normal); - if (ret) - return ret; - } - -- return real_connect(fd, addr, addrlen); -+ return real.connect(fd, addr, addrlen); - } - - ssize_t recv(int socket, void *buf, size_t len, int flags) - { - int fd; - return (fd_get(socket, &fd) == fd_rsocket) ? -- rrecv(fd, buf, len, flags) : real_recv(fd, buf, len, flags); -+ rrecv(fd, buf, len, flags) : real.recv(fd, buf, len, flags); - } - - ssize_t recvfrom(int socket, void *buf, size_t len, int flags, -@@ -440,14 +462,14 @@ ssize_t recvfrom(int socket, void *buf, size_t len, int flags, - int fd; - return (fd_get(socket, &fd) == fd_rsocket) ? - rrecvfrom(fd, buf, len, flags, src_addr, addrlen) : -- real_recvfrom(fd, buf, len, flags, src_addr, addrlen); -+ real.recvfrom(fd, buf, len, flags, src_addr, addrlen); - } - - ssize_t recvmsg(int socket, struct msghdr *msg, int flags) - { - int fd; - return (fd_get(socket, &fd) == fd_rsocket) ? -- rrecvmsg(fd, msg, flags) : real_recvmsg(fd, msg, flags); -+ rrecvmsg(fd, msg, flags) : real.recvmsg(fd, msg, flags); - } - - ssize_t read(int socket, void *buf, size_t count) -@@ -455,7 +477,7 @@ ssize_t read(int socket, void *buf, size_t count) - int fd; - init_preload(); - return (fd_get(socket, &fd) == fd_rsocket) ? -- rread(fd, buf, count) : real_read(fd, buf, count); -+ rread(fd, buf, count) : real.read(fd, buf, count); - } - - ssize_t readv(int socket, const struct iovec *iov, int iovcnt) -@@ -463,14 +485,14 @@ ssize_t readv(int socket, const struct iovec *iov, int iovcnt) - int fd; - init_preload(); - return (fd_get(socket, &fd) == fd_rsocket) ? -- rreadv(fd, iov, iovcnt) : real_readv(fd, iov, iovcnt); -+ 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) ? -- rsend(fd, buf, len, flags) : real_send(fd, buf, len, flags); -+ rsend(fd, buf, len, flags) : real.send(fd, buf, len, flags); - } - - ssize_t sendto(int socket, const void *buf, size_t len, int flags, -@@ -479,14 +501,14 @@ ssize_t sendto(int socket, const void *buf, size_t len, int flags, - int fd; - return (fd_get(socket, &fd) == fd_rsocket) ? - rsendto(fd, buf, len, flags, dest_addr, addrlen) : -- real_sendto(fd, buf, len, flags, dest_addr, addrlen); -+ real.sendto(fd, buf, len, flags, dest_addr, addrlen); - } - - ssize_t sendmsg(int socket, const struct msghdr *msg, int flags) - { - int fd; - return (fd_get(socket, &fd) == fd_rsocket) ? -- rsendmsg(fd, msg, flags) : real_sendmsg(fd, msg, flags); -+ rsendmsg(fd, msg, flags) : real.sendmsg(fd, msg, flags); - } - - ssize_t write(int socket, const void *buf, size_t count) -@@ -494,7 +516,7 @@ ssize_t write(int socket, const void *buf, size_t count) - int fd; - init_preload(); - return (fd_get(socket, &fd) == fd_rsocket) ? -- rwrite(fd, buf, count) : real_write(fd, buf, count); -+ rwrite(fd, buf, count) : real.write(fd, buf, count); - } - - ssize_t writev(int socket, const struct iovec *iov, int iovcnt) -@@ -502,7 +524,7 @@ ssize_t writev(int socket, const struct iovec *iov, int iovcnt) - int fd; - init_preload(); - return (fd_get(socket, &fd) == fd_rsocket) ? -- rwritev(fd, iov, iovcnt) : real_writev(fd, iov, iovcnt); -+ rwritev(fd, iov, iovcnt) : real.writev(fd, iov, iovcnt); - } - - static struct pollfd *fds_alloc(nfds_t nfds) -@@ -532,7 +554,7 @@ int poll(struct pollfd *fds, nfds_t nfds, int timeout) - goto use_rpoll; - } - -- return real_poll(fds, nfds, timeout); -+ return real.poll(fds, nfds, timeout); - - use_rpoll: - rfds = fds_alloc(nfds); -@@ -637,14 +659,14 @@ int shutdown(int socket, int how) - { - int fd; - return (fd_get(socket, &fd) == fd_rsocket) ? -- rshutdown(fd, how) : real_shutdown(fd, how); -+ rshutdown(fd, how) : real.shutdown(fd, how); - } - - int close(int socket) - { - int fd; - init_preload(); -- return (fd_close(socket, &fd) == fd_rsocket) ? rclose(fd) : real_close(fd); -+ return (fd_close(socket, &fd) == fd_rsocket) ? rclose(fd) : real.close(fd); - } - - int getpeername(int socket, struct sockaddr *addr, socklen_t *addrlen) -@@ -652,7 +674,7 @@ int getpeername(int socket, struct sockaddr *addr, socklen_t *addrlen) - int fd; - return (fd_get(socket, &fd) == fd_rsocket) ? - rgetpeername(fd, addr, addrlen) : -- real_getpeername(fd, addr, addrlen); -+ real.getpeername(fd, addr, addrlen); - } - - int getsockname(int socket, struct sockaddr *addr, socklen_t *addrlen) -@@ -660,7 +682,7 @@ int getsockname(int socket, struct sockaddr *addr, socklen_t *addrlen) - int fd; - return (fd_get(socket, &fd) == fd_rsocket) ? - rgetsockname(fd, addr, addrlen) : -- real_getsockname(fd, addr, addrlen); -+ real.getsockname(fd, addr, addrlen); - } - - int setsockopt(int socket, int level, int optname, -@@ -669,7 +691,7 @@ int setsockopt(int socket, int level, int optname, - int fd; - return (fd_get(socket, &fd) == fd_rsocket) ? - rsetsockopt(fd, level, optname, optval, optlen) : -- real_setsockopt(fd, level, optname, optval, optlen); -+ real.setsockopt(fd, level, optname, optval, optlen); - } - - int getsockopt(int socket, int level, int optname, -@@ -678,7 +700,7 @@ int getsockopt(int socket, int level, int optname, - int fd; - return (fd_get(socket, &fd) == fd_rsocket) ? - rgetsockopt(fd, level, optname, optval, optlen) : -- real_getsockopt(fd, level, optname, optval, optlen); -+ real.getsockopt(fd, level, optname, optval, optlen); - } - - int fcntl(int socket, int cmd, ... /* arg */) -@@ -697,7 +719,7 @@ int fcntl(int socket, int cmd, ... /* arg */) - case F_GETSIG: - case F_GETLEASE: - ret = (fd_get(socket, &fd) == fd_rsocket) ? -- rfcntl(fd, cmd) : real_fcntl(fd, cmd); -+ rfcntl(fd, cmd) : real.fcntl(fd, cmd); - break; - case F_DUPFD: - /*case F_DUPFD_CLOEXEC:*/ -@@ -709,12 +731,12 @@ int fcntl(int socket, int cmd, ... /* arg */) - case F_NOTIFY: - lparam = va_arg(args, long); - ret = (fd_get(socket, &fd) == fd_rsocket) ? -- rfcntl(fd, cmd, lparam) : real_fcntl(fd, cmd, lparam); -+ rfcntl(fd, cmd, lparam) : real.fcntl(fd, cmd, lparam); - break; - default: - pparam = va_arg(args, void *); - ret = (fd_get(socket, &fd) == fd_rsocket) ? -- rfcntl(fd, cmd, pparam) : real_fcntl(fd, cmd, pparam); -+ rfcntl(fd, cmd, pparam) : real.fcntl(fd, cmd, pparam); - break; - } - va_end(args); diff --git a/patches/transpose b/patches/transpose index eac9025d..83515af9 100644 --- a/patches/transpose +++ b/patches/transpose @@ -1,5 +1,5 @@ Bottom: 7ec243f3149e9a1ff1d5183f18e30d2458e354d6 -Top: 454cf9a1db769bb4bf7d2c1d4b95f0a992a0aafa +Top: 19f8849f48737cbf50102511ff14a78d39040f12 Author: Sean Hefty Date: 2012-07-16 14:17:58 -0700 @@ -17,10 +17,158 @@ Signed-off-by: Sean Hefty --- diff --git a/src/preload.c b/src/preload.c -index 2750b30..0d457bf 100644 +index 2750b30..14b09b8 100644 --- a/src/preload.c +++ b/src/preload.c -@@ -252,51 +252,63 @@ out: +@@ -53,38 +53,38 @@ + #include "cma.h" + #include "indexer.h" + +-static int (*real_socket)(int domain, int type, int protocol); +-static int (*real_bind)(int socket, const struct sockaddr *addr, +- socklen_t addrlen); +-static int (*real_listen)(int socket, int backlog); +-static int (*real_accept)(int socket, struct sockaddr *addr, +- socklen_t *addrlen); +-static int (*real_connect)(int socket, const struct sockaddr *addr, +- socklen_t addrlen); +-static ssize_t (*real_recv)(int socket, void *buf, size_t len, int flags); +-static ssize_t (*real_recvfrom)(int socket, void *buf, size_t len, int flags, +- struct sockaddr *src_addr, socklen_t *addrlen); +-static ssize_t (*real_recvmsg)(int socket, struct msghdr *msg, int flags); +-static ssize_t (*real_read)(int socket, void *buf, size_t count); +-static ssize_t (*real_readv)(int socket, const struct iovec *iov, int iovcnt); +-static ssize_t (*real_send)(int socket, const void *buf, size_t len, int flags); +-static ssize_t (*real_sendto)(int socket, const void *buf, size_t len, int flags, +- const struct sockaddr *dest_addr, socklen_t addrlen); +-static ssize_t (*real_sendmsg)(int socket, const struct msghdr *msg, int flags); +-static ssize_t (*real_write)(int socket, const void *buf, size_t count); +-static ssize_t (*real_writev)(int socket, const struct iovec *iov, int iovcnt); +-static int (*real_poll)(struct pollfd *fds, nfds_t nfds, int timeout); +-static int (*real_shutdown)(int socket, int how); +-static int (*real_close)(int socket); +-static int (*real_getpeername)(int socket, struct sockaddr *addr, +- socklen_t *addrlen); +-static int (*real_getsockname)(int socket, struct sockaddr *addr, +- socklen_t *addrlen); +-static int (*real_setsockopt)(int socket, int level, int optname, +- const void *optval, socklen_t optlen); +-static int (*real_getsockopt)(int socket, int level, int optname, +- void *optval, socklen_t *optlen); +-static int (*real_fcntl)(int socket, int cmd, ... /* arg */); ++struct socket_calls { ++ int (*socket)(int domain, int type, int protocol); ++ int (*bind)(int socket, const struct sockaddr *addr, socklen_t addrlen); ++ int (*listen)(int socket, int backlog); ++ int (*accept)(int socket, struct sockaddr *addr, socklen_t *addrlen); ++ int (*connect)(int socket, const struct sockaddr *addr, socklen_t addrlen); ++ ssize_t (*recv)(int socket, void *buf, size_t len, int flags); ++ ssize_t (*recvfrom)(int socket, void *buf, size_t len, int flags, ++ struct sockaddr *src_addr, socklen_t *addrlen); ++ ssize_t (*recvmsg)(int socket, struct msghdr *msg, int flags); ++ ssize_t (*read)(int socket, void *buf, size_t count); ++ ssize_t (*readv)(int socket, const struct iovec *iov, int iovcnt); ++ ssize_t (*send)(int socket, const void *buf, size_t len, int flags); ++ ssize_t (*sendto)(int socket, const void *buf, size_t len, int flags, ++ const struct sockaddr *dest_addr, socklen_t addrlen); ++ ssize_t (*sendmsg)(int socket, const struct msghdr *msg, int flags); ++ ssize_t (*write)(int socket, const void *buf, size_t count); ++ ssize_t (*writev)(int socket, const struct iovec *iov, int iovcnt); ++ int (*poll)(struct pollfd *fds, nfds_t nfds, int timeout); ++ int (*shutdown)(int socket, int how); ++ int (*close)(int socket); ++ int (*getpeername)(int socket, struct sockaddr *addr, socklen_t *addrlen); ++ int (*getsockname)(int socket, struct sockaddr *addr, socklen_t *addrlen); ++ int (*setsockopt)(int socket, int level, int optname, ++ const void *optval, socklen_t optlen); ++ int (*getsockopt)(int socket, int level, int optname, ++ void *optval, socklen_t *optlen); ++ int (*fcntl)(int socket, int cmd, ... /* arg */); ++}; ++ ++static struct socket_calls real; ++static struct socket_calls rs; + + static struct index_map idm; + static pthread_mutex_t mut = PTHREAD_MUTEX_INITIALIZER; +@@ -221,29 +221,53 @@ static void init_preload(void) + if (init) + goto out; + +- real_socket = dlsym(RTLD_NEXT, "socket"); +- real_bind = dlsym(RTLD_NEXT, "bind"); +- real_listen = dlsym(RTLD_NEXT, "listen"); +- real_accept = dlsym(RTLD_NEXT, "accept"); +- real_connect = dlsym(RTLD_NEXT, "connect"); +- real_recv = dlsym(RTLD_NEXT, "recv"); +- real_recvfrom = dlsym(RTLD_NEXT, "recvfrom"); +- real_recvmsg = dlsym(RTLD_NEXT, "recvmsg"); +- real_read = dlsym(RTLD_NEXT, "read"); +- real_readv = dlsym(RTLD_NEXT, "readv"); +- real_send = dlsym(RTLD_NEXT, "send"); +- real_sendto = dlsym(RTLD_NEXT, "sendto"); +- real_sendmsg = dlsym(RTLD_NEXT, "sendmsg"); +- real_write = dlsym(RTLD_NEXT, "write"); +- real_writev = dlsym(RTLD_NEXT, "writev"); +- real_poll = dlsym(RTLD_NEXT, "poll"); +- real_shutdown = dlsym(RTLD_NEXT, "shutdown"); +- real_close = dlsym(RTLD_NEXT, "close"); +- real_getpeername = dlsym(RTLD_NEXT, "getpeername"); +- real_getsockname = dlsym(RTLD_NEXT, "getsockname"); +- real_setsockopt = dlsym(RTLD_NEXT, "setsockopt"); +- real_getsockopt = dlsym(RTLD_NEXT, "getsockopt"); +- real_fcntl = dlsym(RTLD_NEXT, "fcntl"); ++ real.socket = dlsym(RTLD_NEXT, "socket"); ++ real.bind = dlsym(RTLD_NEXT, "bind"); ++ real.listen = dlsym(RTLD_NEXT, "listen"); ++ real.accept = dlsym(RTLD_NEXT, "accept"); ++ real.connect = dlsym(RTLD_NEXT, "connect"); ++ real.recv = dlsym(RTLD_NEXT, "recv"); ++ real.recvfrom = dlsym(RTLD_NEXT, "recvfrom"); ++ real.recvmsg = dlsym(RTLD_NEXT, "recvmsg"); ++ real.read = dlsym(RTLD_NEXT, "read"); ++ real.readv = dlsym(RTLD_NEXT, "readv"); ++ real.send = dlsym(RTLD_NEXT, "send"); ++ real.sendto = dlsym(RTLD_NEXT, "sendto"); ++ real.sendmsg = dlsym(RTLD_NEXT, "sendmsg"); ++ real.write = dlsym(RTLD_NEXT, "write"); ++ real.writev = dlsym(RTLD_NEXT, "writev"); ++ real.poll = dlsym(RTLD_NEXT, "poll"); ++ real.shutdown = dlsym(RTLD_NEXT, "shutdown"); ++ real.close = dlsym(RTLD_NEXT, "close"); ++ real.getpeername = dlsym(RTLD_NEXT, "getpeername"); ++ real.getsockname = dlsym(RTLD_NEXT, "getsockname"); ++ real.setsockopt = dlsym(RTLD_NEXT, "setsockopt"); ++ real.getsockopt = dlsym(RTLD_NEXT, "getsockopt"); ++ real.fcntl = dlsym(RTLD_NEXT, "fcntl"); ++ ++ rs.socket = dlsym(RTLD_DEFAULT, "rsocket"); ++ rs.bind = dlsym(RTLD_DEFAULT, "rbind"); ++ rs.listen = dlsym(RTLD_DEFAULT, "rlisten"); ++ rs.accept = dlsym(RTLD_DEFAULT, "raccept"); ++ rs.connect = dlsym(RTLD_DEFAULT, "rconnect"); ++ rs.recv = dlsym(RTLD_DEFAULT, "rrecv"); ++ rs.recvfrom = dlsym(RTLD_DEFAULT, "rrecvfrom"); ++ rs.recvmsg = dlsym(RTLD_DEFAULT, "rrecvmsg"); ++ rs.read = dlsym(RTLD_DEFAULT, "rread"); ++ rs.readv = dlsym(RTLD_DEFAULT, "rreadv"); ++ rs.send = dlsym(RTLD_DEFAULT, "rsend"); ++ rs.sendto = dlsym(RTLD_DEFAULT, "rsendto"); ++ rs.sendmsg = dlsym(RTLD_DEFAULT, "rsendmsg"); ++ rs.write = dlsym(RTLD_DEFAULT, "rwrite"); ++ rs.writev = dlsym(RTLD_DEFAULT, "rwritev"); ++ rs.poll = dlsym(RTLD_DEFAULT, "rpoll"); ++ rs.shutdown = dlsym(RTLD_DEFAULT, "rshutdown"); ++ rs.close = dlsym(RTLD_DEFAULT, "rclose"); ++ rs.getpeername = dlsym(RTLD_DEFAULT, "rgetpeername"); ++ rs.getsockname = dlsym(RTLD_DEFAULT, "rgetsockname"); ++ rs.setsockopt = dlsym(RTLD_DEFAULT, "rsetsockopt"); ++ rs.getsockopt = dlsym(RTLD_DEFAULT, "rgetsockopt"); ++ rs.fcntl = dlsym(RTLD_DEFAULT, "rfcntl"); + + getenv_options(); + init = 1; +@@ -252,51 +276,67 @@ out: } /* @@ -33,93 +181,304 @@ index 2750b30..0d457bf 100644 */ -static int socket_fallback(int socket, int *fd) +static int -+transpose_socket(int index, int *fd, enum fd_type new_type, -+ int (*socket_new)(int domain, int type, int protocol), -+ int (*close_old)(int socket), -+ int (*close_new)(int socket), -+ int (*getsockname_old)(int socket, struct sockaddr *addr, -+ socklen_t *addrlen), -+ int (*getsockopt_old)(int socket, int level, int optname, -+ void *optval, socklen_t *optlen), -+ int (*setsockopt_new)(int socket, int level, int optname, -+ const void *optval, socklen_t optlen), -+ int (*fcntl_old)(int socket, int cmd, ... /* arg */), -+ int (*fcntl_new)(int socket, int cmd, ... /* arg */)) ++transpose_socket(int index, int *fd, enum fd_type new_type) { socklen_t len = 0; int new_fd, param, ret; - ret = rgetsockname(*fd, NULL, &len); -+ ret = getsockname_old(*fd, NULL, &len); ++ ret = new_type == fd_rsocket ? ++ real.getsockname(*fd, NULL, &len) : rgetsockname(*fd, NULL, &len); if (ret) return ret; param = (len == sizeof(struct sockaddr_in6)) ? PF_INET6 : PF_INET; - new_fd = real_socket(param, SOCK_STREAM, IPPROTO_TCP); -+ new_fd = socket_new(param, SOCK_STREAM, 0); ++ new_fd = new_type == fd_rsocket ? ++ rsocket(param, SOCK_STREAM, 0) : socket(param, SOCK_STREAM, 0); if (new_fd < 0) return new_fd; - ret = rfcntl(*fd, F_GETFL); -+ ret = fcntl_old(*fd, F_GETFL); - if (ret > 0) +- if (ret > 0) - ret = real_fcntl(new_fd, F_SETFL, ret); -+ ret = fcntl_new(new_fd, F_SETFL, ret); ++ ret = new_type == fd_rsocket ? ++ real.fcntl(*fd, F_GETFL) : rcntl(*fd, F_GETFL); ++ if (ret > 0) { ++ ret = new_type == fd_rsocket ? ++ rfcntl(new_fd, F_SETFL, ret) : real.fcntl(new_fd, F_SETFL, ret); ++ } if (ret) goto err; len = sizeof param; - ret = rgetsockopt(*fd, SOL_SOCKET, SO_REUSEADDR, ¶m, &len); -+ ret = getsockopt_old(*fd, SOL_SOCKET, SO_REUSEADDR, ¶m, &len); - if (param && !ret) +- if (param && !ret) - ret = real_setsockopt(new_fd, SOL_SOCKET, SO_REUSEADDR, ¶m, len); -+ ret = setsockopt_new(new_fd, SOL_SOCKET, SO_REUSEADDR, ¶m, len); ++ ret = new_type == fd_rsocket ? ++ real.getsockopt(*fd, SOL_SOCKET, SO_REUSEADDR, ¶m, &len) : ++ rgetsockopt(*fd, SOL_SOCKET, SO_REUSEADDR, ¶m, &len); ++ if (param && !ret) { ++ ret = new_type == fd_rsocket ? ++ rsetsockopt(new_fd, SOL_SOCKET, SO_REUSEADDR, ¶m, len) : ++ real.setsockopt(new_fd, SOL_SOCKET, SO_REUSEADDR, ¶m, len); ++ } if (ret) goto err; len = sizeof param; - ret = rgetsockopt(*fd, IPPROTO_TCP, TCP_NODELAY, ¶m, &len); -+ ret = getsockopt_old(*fd, IPPROTO_TCP, TCP_NODELAY, ¶m, &len); - if (param && !ret) +- if (param && !ret) - ret = real_setsockopt(new_fd, IPPROTO_TCP, TCP_NODELAY, ¶m, len); -+ ret = setsockopt_new(new_fd, IPPROTO_TCP, TCP_NODELAY, ¶m, len); ++ ret = new_type == fd_rsocket ? ++ real.getsockopt(*fd, IPPROTO_TCP, TCP_NODELAY, ¶m, &len) : ++ rgetsockopt(*fd, IPPROTO_TCP, TCP_NODELAY, ¶m, &len); ++ if (param && !ret) { ++ ret = new_type == fd_rsocket ? ++ rsetsockopt(new_fd, IPPROTO_TCP, TCP_NODELAY, ¶m, len) : ++ real.setsockopt(new_fd, IPPROTO_TCP, TCP_NODELAY, ¶m, len); ++ } if (ret) goto err; - rclose(*fd); - fd_store(socket, new_fd, fd_normal); -+ close_old(*fd); ++ new_type == fd_rsocket ? rclose(*fd) : real.close(*fd); + fd_store(socket, new_fd, new_type); *fd = new_fd; return 0; err: - real_close(new_fd); -+ close_new(new_fd); ++ new_type == fd_rsocket ? real.close(new_fd) : rclose(new_fd); return ret; } -@@ -351,7 +363,10 @@ int bind(int socket, const struct sockaddr *addr, socklen_t addrlen) +@@ -338,7 +378,7 @@ int socket(int domain, int type, int protocol) + } + fd_close(index, &ret); + real: +- return real_socket(domain, type, protocol); ++ return real.socket(domain, type, protocol); + } + + int bind(int socket, const struct sockaddr *addr, socklen_t addrlen) +@@ -351,19 +391,19 @@ int bind(int socket, const struct sockaddr *addr, socklen_t addrlen) if (!sin->sin_port || ntohs(sin->sin_port) > 1024) return rbind(fd, addr, addrlen); - ret = socket_fallback(socket, &fd); -+ ret = transpose_socket(socket, &fd, fd_normal, real_socket, -+ rclose, real_close, rgetsockname, -+ rgetsockopt, real_setsockopt, -+ rfcntl, real_fcntl); ++ ret = transpose_socket(socket, &fd, fd_normal); if (ret) return ret; } -@@ -401,7 +416,10 @@ int connect(int socket, const struct sockaddr *addr, socklen_t addrlen) + +- return real_bind(fd, addr, addrlen); ++ return real.bind(fd, addr, addrlen); + } + + int listen(int socket, int backlog) + { + int fd; + return (fd_get(socket, &fd) == fd_rsocket) ? +- rlisten(fd, backlog) : real_listen(fd, backlog); ++ rlisten(fd, backlog) : real.listen(fd, backlog); + } + + int accept(int socket, struct sockaddr *addr, socklen_t *addrlen) +@@ -384,7 +424,7 @@ int accept(int socket, struct sockaddr *addr, socklen_t *addrlen) + fd_store(index, ret, fd_rsocket); + return index; + } else { +- return real_accept(fd, addr, addrlen); ++ return real.accept(fd, addr, addrlen); + } + } + +@@ -401,19 +441,19 @@ int connect(int socket, const struct sockaddr *addr, socklen_t addrlen) return ret; } - ret = socket_fallback(socket, &fd); -+ ret = transpose_socket(socket, &fd, fd_normal, real_socket, -+ rclose, real_close, rgetsockname, -+ rgetsockopt, real_setsockopt, -+ rfcntl, real_fcntl); ++ ret = transpose_socket(socket, &fd, fd_normal); if (ret) return ret; } + +- return real_connect(fd, addr, addrlen); ++ return real.connect(fd, addr, addrlen); + } + + ssize_t recv(int socket, void *buf, size_t len, int flags) + { + int fd; + return (fd_get(socket, &fd) == fd_rsocket) ? +- rrecv(fd, buf, len, flags) : real_recv(fd, buf, len, flags); ++ rrecv(fd, buf, len, flags) : real.recv(fd, buf, len, flags); + } + + ssize_t recvfrom(int socket, void *buf, size_t len, int flags, +@@ -422,14 +462,14 @@ ssize_t recvfrom(int socket, void *buf, size_t len, int flags, + int fd; + return (fd_get(socket, &fd) == fd_rsocket) ? + rrecvfrom(fd, buf, len, flags, src_addr, addrlen) : +- real_recvfrom(fd, buf, len, flags, src_addr, addrlen); ++ real.recvfrom(fd, buf, len, flags, src_addr, addrlen); + } + + ssize_t recvmsg(int socket, struct msghdr *msg, int flags) + { + int fd; + return (fd_get(socket, &fd) == fd_rsocket) ? +- rrecvmsg(fd, msg, flags) : real_recvmsg(fd, msg, flags); ++ rrecvmsg(fd, msg, flags) : real.recvmsg(fd, msg, flags); + } + + ssize_t read(int socket, void *buf, size_t count) +@@ -437,7 +477,7 @@ ssize_t read(int socket, void *buf, size_t count) + int fd; + init_preload(); + return (fd_get(socket, &fd) == fd_rsocket) ? +- rread(fd, buf, count) : real_read(fd, buf, count); ++ rread(fd, buf, count) : real.read(fd, buf, count); + } + + ssize_t readv(int socket, const struct iovec *iov, int iovcnt) +@@ -445,14 +485,14 @@ ssize_t readv(int socket, const struct iovec *iov, int iovcnt) + int fd; + init_preload(); + return (fd_get(socket, &fd) == fd_rsocket) ? +- rreadv(fd, iov, iovcnt) : real_readv(fd, iov, iovcnt); ++ 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) ? +- rsend(fd, buf, len, flags) : real_send(fd, buf, len, flags); ++ rsend(fd, buf, len, flags) : real.send(fd, buf, len, flags); + } + + ssize_t sendto(int socket, const void *buf, size_t len, int flags, +@@ -461,14 +501,14 @@ ssize_t sendto(int socket, const void *buf, size_t len, int flags, + int fd; + return (fd_get(socket, &fd) == fd_rsocket) ? + rsendto(fd, buf, len, flags, dest_addr, addrlen) : +- real_sendto(fd, buf, len, flags, dest_addr, addrlen); ++ real.sendto(fd, buf, len, flags, dest_addr, addrlen); + } + + ssize_t sendmsg(int socket, const struct msghdr *msg, int flags) + { + int fd; + return (fd_get(socket, &fd) == fd_rsocket) ? +- rsendmsg(fd, msg, flags) : real_sendmsg(fd, msg, flags); ++ rsendmsg(fd, msg, flags) : real.sendmsg(fd, msg, flags); + } + + ssize_t write(int socket, const void *buf, size_t count) +@@ -476,7 +516,7 @@ ssize_t write(int socket, const void *buf, size_t count) + int fd; + init_preload(); + return (fd_get(socket, &fd) == fd_rsocket) ? +- rwrite(fd, buf, count) : real_write(fd, buf, count); ++ rwrite(fd, buf, count) : real.write(fd, buf, count); + } + + ssize_t writev(int socket, const struct iovec *iov, int iovcnt) +@@ -484,7 +524,7 @@ ssize_t writev(int socket, const struct iovec *iov, int iovcnt) + int fd; + init_preload(); + return (fd_get(socket, &fd) == fd_rsocket) ? +- rwritev(fd, iov, iovcnt) : real_writev(fd, iov, iovcnt); ++ rwritev(fd, iov, iovcnt) : real.writev(fd, iov, iovcnt); + } + + static struct pollfd *fds_alloc(nfds_t nfds) +@@ -514,7 +554,7 @@ int poll(struct pollfd *fds, nfds_t nfds, int timeout) + goto use_rpoll; + } + +- return real_poll(fds, nfds, timeout); ++ return real.poll(fds, nfds, timeout); + + use_rpoll: + rfds = fds_alloc(nfds); +@@ -619,14 +659,14 @@ int shutdown(int socket, int how) + { + int fd; + return (fd_get(socket, &fd) == fd_rsocket) ? +- rshutdown(fd, how) : real_shutdown(fd, how); ++ rshutdown(fd, how) : real.shutdown(fd, how); + } + + int close(int socket) + { + int fd; + init_preload(); +- return (fd_close(socket, &fd) == fd_rsocket) ? rclose(fd) : real_close(fd); ++ return (fd_close(socket, &fd) == fd_rsocket) ? rclose(fd) : real.close(fd); + } + + int getpeername(int socket, struct sockaddr *addr, socklen_t *addrlen) +@@ -634,7 +674,7 @@ int getpeername(int socket, struct sockaddr *addr, socklen_t *addrlen) + int fd; + return (fd_get(socket, &fd) == fd_rsocket) ? + rgetpeername(fd, addr, addrlen) : +- real_getpeername(fd, addr, addrlen); ++ real.getpeername(fd, addr, addrlen); + } + + int getsockname(int socket, struct sockaddr *addr, socklen_t *addrlen) +@@ -642,7 +682,7 @@ int getsockname(int socket, struct sockaddr *addr, socklen_t *addrlen) + int fd; + return (fd_get(socket, &fd) == fd_rsocket) ? + rgetsockname(fd, addr, addrlen) : +- real_getsockname(fd, addr, addrlen); ++ real.getsockname(fd, addr, addrlen); + } + + int setsockopt(int socket, int level, int optname, +@@ -651,7 +691,7 @@ int setsockopt(int socket, int level, int optname, + int fd; + return (fd_get(socket, &fd) == fd_rsocket) ? + rsetsockopt(fd, level, optname, optval, optlen) : +- real_setsockopt(fd, level, optname, optval, optlen); ++ real.setsockopt(fd, level, optname, optval, optlen); + } + + int getsockopt(int socket, int level, int optname, +@@ -660,7 +700,7 @@ int getsockopt(int socket, int level, int optname, + int fd; + return (fd_get(socket, &fd) == fd_rsocket) ? + rgetsockopt(fd, level, optname, optval, optlen) : +- real_getsockopt(fd, level, optname, optval, optlen); ++ real.getsockopt(fd, level, optname, optval, optlen); + } + + int fcntl(int socket, int cmd, ... /* arg */) +@@ -679,7 +719,7 @@ int fcntl(int socket, int cmd, ... /* arg */) + case F_GETSIG: + case F_GETLEASE: + ret = (fd_get(socket, &fd) == fd_rsocket) ? +- rfcntl(fd, cmd) : real_fcntl(fd, cmd); ++ rfcntl(fd, cmd) : real.fcntl(fd, cmd); + break; + case F_DUPFD: + /*case F_DUPFD_CLOEXEC:*/ +@@ -691,12 +731,12 @@ int fcntl(int socket, int cmd, ... /* arg */) + case F_NOTIFY: + lparam = va_arg(args, long); + ret = (fd_get(socket, &fd) == fd_rsocket) ? +- rfcntl(fd, cmd, lparam) : real_fcntl(fd, cmd, lparam); ++ rfcntl(fd, cmd, lparam) : real.fcntl(fd, cmd, lparam); + break; + default: + pparam = va_arg(args, void *); + ret = (fd_get(socket, &fd) == fd_rsocket) ? +- rfcntl(fd, cmd, pparam) : real_fcntl(fd, cmd, pparam); ++ rfcntl(fd, cmd, pparam) : real.fcntl(fd, cmd, pparam); + break; + } + va_end(args);