summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2016-12-25 18:13:11 +0100
committerHarald Welte <laforge@gnumonks.org>2016-12-25 18:13:11 +0100
commitdaacff91065742d09bc944e9e90da928bc3a08cd (patch)
treedfa33d40be99c87e40dcd20c1fe674c479951b16
parent86bd71c750981c10dcc289c87d4aaffad96f9105 (diff)
qmuxd_wrapper: Reduce dlsym() load (don't call it again and again)
-rw-r--r--qmi/ld_preload_wrapper/qmuxd_wrapper.c18
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);
}