diff options
author | Harald Welte <laforge@gnumonks.org> | 2016-12-25 18:13:11 +0100 |
---|---|---|
committer | Harald Welte <laforge@gnumonks.org> | 2016-12-25 18:13:11 +0100 |
commit | daacff91065742d09bc944e9e90da928bc3a08cd (patch) | |
tree | dfa33d40be99c87e40dcd20c1fe674c479951b16 /qmi/ld_preload_wrapper/qmuxd_wrapper.c | |
parent | 86bd71c750981c10dcc289c87d4aaffad96f9105 (diff) |
qmuxd_wrapper: Reduce dlsym() load (don't call it again and again)
Diffstat (limited to 'qmi/ld_preload_wrapper/qmuxd_wrapper.c')
-rw-r--r-- | qmi/ld_preload_wrapper/qmuxd_wrapper.c | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/qmi/ld_preload_wrapper/qmuxd_wrapper.c b/qmi/ld_preload_wrapper/qmuxd_wrapper.c index 7b2830d..02a5e75 100644 --- a/qmi/ld_preload_wrapper/qmuxd_wrapper.c +++ b/qmi/ld_preload_wrapper/qmuxd_wrapper.c @@ -70,7 +70,8 @@ ssize_t write(int fd, const void *buf, size_t count) { dump_qmuxd(fd, 1, buf, count); - real_write = dlsym(RTLD_NEXT, "write"); + if (!real_write) + real_write = dlsym(RTLD_NEXT, "write"); return real_write(fd, buf, count); } @@ -78,7 +79,8 @@ ssize_t read(int fd, void *buf, size_t count) { dump_qmuxd(fd, 0, buf, count); - real_read = dlsym(RTLD_NEXT, "read"); + if (!real_read) + real_read = dlsym(RTLD_NEXT, "read"); return real_read(fd, buf, count); } @@ -86,7 +88,8 @@ ssize_t send(int fd, const void *buf, size_t count, int flags) { dump_qmuxd(fd, 1, buf, count); - real_send = dlsym(RTLD_NEXT, "send"); + if (!real_send) + real_send = dlsym(RTLD_NEXT, "send"); return real_send(fd, buf, count, flags); } @@ -94,7 +97,8 @@ ssize_t recv(int fd, void *buf, size_t len, int flags) { dump_qmuxd(fd, 0, buf, len); - real_recv = dlsym(RTLD_NEXT, "recv"); + if (!real_recv) + real_recv = dlsym(RTLD_NEXT, "recv"); return real_recv(fd, buf, len, flags); } @@ -108,7 +112,8 @@ int connect(int fd, const struct sockaddr *addr, socklen_t addrlen) } } - real_connect = dlsym(RTLD_NEXT, "connect"); + if (!real_connect) + real_connect = dlsym(RTLD_NEXT, "connect"); return real_connect(fd, addr, addrlen); } @@ -122,6 +127,7 @@ int close(int fd) trace_fds[i] = -1; } } - real_close = dlsym(RTLD_NEXT, "close"); + if (!real_close) + real_close = dlsym(RTLD_NEXT, "close"); return real_close(fd); } |