Ver Fonte

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

Eric Andersen há 23 anos atrás
pai
commit
d0c48d4a7f
2 ficheiros alterados com 8 adições e 0 exclusões
  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