this feature should only be used if it cannot be avoided. There are several
reasonse for this:
The change in the scope affects all symbols and all
the DSOs which are loaded. Some symbols might
have to be interposed by definitions in the global
scope which now will not happen.
Already loaded DSOs are not affected which could
cause unconsistent results depending on whether
the DSO is already loaded (it might be dynamically
loaded, so there is even a race condition).
...
The RTLD_DEEPBIND flag should really only be used as
a last resort. Fixing the application to not depend on the
flag's functionality is the much better solution.
The inconsistency that RTLD_DEEPBIND causes with jemalloc is that dynamic libraries opened with RTLD_DEEPBIND will use libc's malloc while libc is still using jemalloc. A libc function may return a pointer to something that should be passed to free, and the dynamic library will call libc's free, but libc used jemalloc to allocate the memory.
Excepts from what Ulrich Drepper says about the RTLD_DEEPBIND flag he added: people. redhat. com/drepper/ dsohowto. pdf)
("How To Write Shared Libraries", August 20, 2006,
http://
this feature should only be used if it cannot be avoided. There are several
reasonse for this:
The change in the scope affects all symbols and all
the DSOs which are loaded. Some symbols might
have to be interposed by definitions in the global
scope which now will not happen.
Already loaded DSOs are not affected which could
cause unconsistent results depending on whether
the DSO is already loaded (it might be dynamically
loaded, so there is even a race condition).
...
The RTLD_DEEPBIND flag should really only be used as
a last resort. Fixing the application to not depend on the
flag's functionality is the much better solution.
The inconsistency that RTLD_DEEPBIND causes with jemalloc is that dynamic libraries opened with RTLD_DEEPBIND will use libc's malloc while libc is still using jemalloc. A libc function may return a pointer to something that should be passed to free, and the dynamic library will call libc's free, but libc used jemalloc to allocate the memory.
I raised a question on this behavior here: sourceware. org/ml/ libc-alpha/ 2009-06/ msg00168. html
http://
But it looks like we can make libc's free (and malloc, etc) use jemalloc: www.gnu. org/s/libc/ manual/ html_node/ Hooks-for- Malloc. html
http://