Explorar el Código

For some perverse reason we were not registering destructors
for dlopen'd libraries. This fixes that.
-Erik

Eric Andersen hace 23 años
padre
commit
d0c48d4a7f
Se han modificado 2 ficheros con 8 adiciones y 0 borrados
  1. 4 0
      ldso/libdl/dlib.c
  2. 4 0
      ldso/libdl/libdl.c

+ 4 - 0
ldso/libdl/dlib.c

@@ -225,6 +225,10 @@ void *_dlopen(const char *libname, int flag)
 			dl_elf_init = (int (*)(void)) (tpnt->loadaddr + tpnt->dynamic_info[DT_INIT]);
 			(*dl_elf_init) ();
 		}
+		if (tpnt->dynamic_info[DT_FINI]) {
+			atexit((void (*)(void)) (tpnt->loadaddr + tpnt->dynamic_info[DT_FINI]));
+		}
+
 	}
 
 #ifdef USE_CACHE

+ 4 - 0
ldso/libdl/libdl.c

@@ -225,6 +225,10 @@ void *_dlopen(const char *libname, int flag)
 			dl_elf_init = (int (*)(void)) (tpnt->loadaddr + tpnt->dynamic_info[DT_INIT]);
 			(*dl_elf_init) ();
 		}
+		if (tpnt->dynamic_info[DT_FINI]) {
+			atexit((void (*)(void)) (tpnt->loadaddr + tpnt->dynamic_info[DT_FINI]));
+		}
+
 	}
 
 #ifdef USE_CACHE