Hi,

I think we should go for the "best, but more difficult" option - how a module is to be load must be 100% transparent for the user, so this information should not reside in script, but in the module interface.

let's have a new field in the interface saying how the module should be load - if set to RTLD_GLOBAL, the module will be accordingly reloaded.

regards,
bogdan

Daniel-Constantin Mierla wrote:

Hello Bastian,

I will check the sl and tm code to get the collision fixed, it is better to avoid it, but I am afraid that other modules will have this problem (db ones especially...). Also, RTLD_GLOBAL should be used only if necessary, I don't think that all symbols should become available.

Your proposed options are pretty much ok, I am thinking to get it in a way easy for administrators. You can use your patch for now to continue the development. It might be adjusted to give the flags separately, not in module's path, or we go for a solution to hide completely those flags.

Thanks for your update,
Daniel


On 11/24/06 10:38, Bastian Friedrich wrote:

Hi,

Am Mittwoch, 15. November 2006 18:17 schrieb Bastian Friedrich:
In a nutshell: With RTLD_LOCAL (default behavior on linux), perl segfaults.
With RTLD_GLOBAL, t_relay segfaults :((


I've dug deeper into the topic:

* Yes, a shared library that is dlopen'ed and linked against perl needs
  RTLD_GLOBAL. See
http://groups.google.com/group/comp.lang.perl.misc/msg/a2877cf7e0c656fe * If all modules but sl.so are loaded with RTLD_GLOBAL, everything is fine
* If sl.so is loaded with RTLD_GLOBAL, a segfault occurs in tm.so's code
  (huh???). At least, my gdb says so ;)

I was (yet) unable to find the reason for the segfault. Thus, I'd like to propose some options: * Introduce a flag that lets the user configure whether RTLD_GLOBAL should be
  set. See attached patch: If the user configures
'loadmodule "/my/module.so"', everything stays at it is. By appending a "G",
  RTLD_GLOBAL is configured: 'loadmodule "/my/module.so G"'
* Set RTLD_GLOBAL, and fix the segfault... I expect some symbol collision, but
  was unable to locate it :(
* Add an optional parameter to load_module(), plus a | LOADMODULE STRING COMMA NUMBER
  path in the config parser. You'd 'loadmodule "/my/module.so", 1' then.
* Best, but a little more difficult: open module regularly. Try to call a function "getflags()" or something similar in that module. If it exists,
  close library again and re-open it with the new flags.

Looking forward to read about your opinions!

Thx,
   Bastian



_______________________________________________
Devel mailing list
[email protected]
http://openser.org/cgi-bin/mailman/listinfo/devel

Reply via email to