Estoy usando dlopen() en un módulo de Apache que estoy escribiendo para poder tener un sistema de complemento para mi módulo. Descubrí que si compilo mi módulo, compilo mi complemento y empiezo Apache, todo funciona bien._dl_close Error de aserción
Si, sin embargo, después de haber hecho todo eso, vuelvo a compilar mi complemento (haciendo un pequeño cambio o dos en el código de los complementos) mi carga de la página siguiente provocará que Apache falle por segmentación. Cada solicitud posterior funciona bien, de nuevo. Por lo tanto, solo la carga de la primera página inmediatamente después de la compilación causa la segfault.
He estado tratando de hacer frente a este por unos días (no soy muy bueno para la depuración de C) y hoy en día, me di cuenta de esto en mis registros de errores de Apache:
Inconsistency detected by ld.so: dl-close.c: 719: _dl_close: Assertion `map->l_init_called' failed!
Alguien tiene alguna idea de lo que es pasando? ¿Esto significa que no es mi código y que he estado buscando un error fantasma? Estoy bastante seguro de que llamo a dlcose() para cada llamada a dlopen(). Sin embargo, este error/segfault en particular parece ocurrir cuando ejecuto apache en modo de proceso único y comienzo a actualizar la página rápidamente.
¡Gracias por los comentarios! No estoy usando RTLD_NODELETE. Estoy bastante seguro de que estoy llamando a dllcose para cada llamada a dlopen (aunque en puntos claramente diferentes en el código). Comprobaré una vez más. –