From 7f9fea74ef4c972ccc7f6cf797f83d1bdbcddde7 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Mon, 17 Sep 2007 13:32:46 +0000 Subject: on Linu disable lazy binding altogether git-svn-id: file:///home/lennart/svn/public/pulseaudio/branches/lennart@1840 fefdeb5f-60dc-0310-8127-8f9354f1896f --- src/daemon/main.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/daemon/main.c b/src/daemon/main.c index 43f573e6..c446582e 100644 --- a/src/daemon/main.c +++ b/src/daemon/main.c @@ -315,7 +315,6 @@ int main(int argc, char *argv[]) { pa_strbuf *buf = NULL; pa_daemon_conf *conf = NULL; pa_mainloop *mainloop = NULL; - char *s; int r = 0, retval = 1, d = 0; int daemon_pipe[2] = { -1, -1 }; @@ -329,6 +328,23 @@ int main(int argc, char *argv[]) { struct timeval tv; #endif + +#if defined(__linux__) && defined(__OPTIMIZE__) + /* + Disable lazy relocations to make usage of external libraries + more deterministic for our RT threads. We abuse __OPTIMIZE__ as + a check whether we are a debug build or not. + */ + + if (!getenv("LD_BIND_NOW")) { + putenv(pa_xstrdup("LD_BIND_NOW=1")); + + /* We have to execute ourselves, because the libc caches the + * value of $LD_BIND_NOW on initialization. */ + pa_assert_se(execv("/proc/self/exe", argv) == 0); + } +#endif + #ifdef HAVE_GETUID real_root = getuid() == 0; suid_root = !real_root && geteuid() == 0; -- cgit