瀏覽代碼

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

Eric Andersen 23 年之前
父節點
當前提交
d0c48d4a7f
共有 2 個文件被更改,包括 8 次插入0 次删除
  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