J'utilise dlopen() dans un module Apache que j'écris pour que je puisse avoir un système de plugin pour mon module. J'ai trouvé que si je compile mon module, compile mon plugin et démarre Apache, tout fonctionne bien._dl_close Echec de l'assertion
Si toutefois, après avoir fait tout cela, je recompile mon plugin, (en faisant un petit changement ou deux au code des plugins,) mon prochain chargement de page provoquera Apache à segfault. Chaque demande ultérieure fonctionne très bien, encore une fois. Ainsi, c'est seulement le premier chargement de la page immédiatement après la compilation qui provoque le segfault.
J'ai essayé d'aborder ce pendant quelques jours (je ne suis pas très au débogage C) et aujourd'hui, j'ai remarqué dans mes journaux d'erreur apache:
Inconsistency detected by ld.so: dl-close.c: 719: _dl_close: Assertion `map->l_init_called' failed!
Quelqu'un a une idée de ce passe? Cela signifie-t-il que ce n'est pas mon code et que j'ai chassé un bug fantôme? Je suis assez confiant que j'appelle dlcose() pour chaque appel à dlopen(). Cependant, ce bug/segfault particulier semble se produire lorsque j'exécute apache en mode mono-processus et que je commence à rafraichir la page rapidement.
Merci pour les commentaires! Je n'utilise pas RTLD_NODELETE. Je suis sûr que j'appelle dllcose pour chaque appel à dlopen (mais à des points différents dans le code.) Je vais vérifier une fois de plus. –