Question

J'utilise dlopen () dans un module Apache que je suis en train d'écrire afin que je puisse avoir un système de plug-in pour mon module. J'ai trouvé que si je compile mon module, compilez mon plug-in, et commencer à Apache, tout fonctionne Peachy-vif.

Si, cependant, après avoir fait tout cela, je recompile mon plug-in, (un petit changement ou deux au code des plug-ins,) mon prochain chargement de la page, Apache segmentation fault. Chaque demande ultérieure fonctionne très bien, encore une fois. Ainsi, il est seulement la première charge de page immédiatement après la compilation qui provoque l'erreur de segmentation.

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 qui se passe? Est-ce que cela veut dire qu'il est mon code et que j'ai été la chasse d'un bug fantôme? Je suis assez confiant que j'appelle dlcose () pour chaque appel à dlopen (). Cependant, ce bug particulier / segfault semble se produire quand je lance apache en mode mono-processus et commencer à rafraîchir la page rapidement.

Était-ce utile?

La solution

Quelques idées:

  1. Probablement vous appelez plus d'une fois dlopen()? Bibliothèque maintient les compteurs dl de référence qui est incrémentée à chaque dlclose() afin déchargera la RTLD_NODELETE bibliothèque SEULEMENT si le compteur == 0.

  2. Avez-vous spécifié drapeau pour strace strace -p<pid> (supposant que vous êtes sous Linux)? Si oui, ne décharge pas <=> votre bibliothèque.

Avez-vous essayé de débogage syscalls avec <=>? Démarrer Apache, trouve son pid et trace tous syscalls Apache doesn en appelant <=>. Probablement il vous donnera une idée de ce qui se passe.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top