[Devel] dlopen(... RTLD_LOCAL vs. RTLD_GLOBAL
bastian.friedrich at collax.com
Wed Nov 15 18:17:30 CET 2006
currently I'm struggling with some segfaults here and there created by dynamic
loaders in different parts of my code.
If my perl4ser module is built and loaded as a dynamic module (as it should
be), it is not possible to use perl modules that again load shared objects:
in this case, openser segfaults (for unknown reasons... deep within the perl
library). With a static module, it works fine.
If the module loading by dlopen() is modified to use RTLD_NOW | RTLD_GLOBAL as
it's flags, this seems to work fine.
Unfortunately, t_relay() breaks, then: Any call that is processed by t_relay()
causes a segfault :((((
In a nutshell: With RTLD_LOCAL (default behavior on linux), perl segfaults.
With RTLD_GLOBAL, t_relay segfaults :((
So my questions are:
* Is there any particular reason why you don't set the "RTLD_GLOBAL" flag in
sr_module.c? Besides the segfault, that is ;). Yes, I know that this flag
probably does not exist on all supported platforms...
* Although OpenSER works well, I see a problem here; do you agree?
* Do you have any idea how to fix the problem? I'm not really deep into the
matter of dynamic loading... :(
Thx in advance!
Collax GmbH . Burkheimer Straße 3 . 79111 Freiburg . Germany
p: +49 (0) 761-45684-24
f: +49 (0) 761-45684-10 www.collax.com
\ Sleep is a poor substitute for caffeine.
More information about the Devel