diff options
author | Robert Collins <rbtcollins@hotmail.com> | 2002-04-19 12:46:19 +0000 |
---|---|---|
committer | Robert Collins <rbtcollins@hotmail.com> | 2002-04-19 12:46:19 +0000 |
commit | 4ce4e69db68ce2155c9235ff718914059866d977 (patch) | |
tree | d513f83720b4bd971a4aea743d6315294d98e50f | |
parent | e9f1cbd0114a837679ca651f7332ab151f696cb8 (diff) | |
download | newlib-4ce4e69db68ce2155c9235ff718914059866d977.zip newlib-4ce4e69db68ce2155c9235ff718914059866d977.tar.gz newlib-4ce4e69db68ce2155c9235ff718914059866d977.tar.bz2 |
2002-04-16 Thomas Pfaff <tpfaff@gmx.net>
* dll_init.h (per_process::dtors_run): New member.
* dll_init.cc (per_module::run_dtors): Run dtors only once.
(dll::init): Initialize dtors_run flag.
-rw-r--r-- | winsup/cygwin/ChangeLog | 6 | ||||
-rw-r--r-- | winsup/cygwin/dll_init.cc | 7 | ||||
-rw-r--r-- | winsup/cygwin/dll_init.h | 1 |
3 files changed, 14 insertions, 0 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index de3ac03..553bd34 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,9 @@ +2002-04-16 Thomas Pfaff <tpfaff@gmx.net> + + * dll_init.h (per_process::dtors_run): New member. + * dll_init.cc (per_module::run_dtors): Run dtors only once. + (dll::init): Initialize dtors_run flag. + Wed Apr 17 11:27:04 2002 Jason Tishler <jason@tishler.net> * security.cc (get_lsa_srv_inf): Prevent extraneous backslashes for diff --git a/winsup/cygwin/dll_init.cc b/winsup/cygwin/dll_init.cc index e5e650f..4ff740c 100644 --- a/winsup/cygwin/dll_init.cc +++ b/winsup/cygwin/dll_init.cc @@ -59,6 +59,11 @@ void per_module::run_dtors () { void (**pfunc)() = dtors; + + if( dtors_run ) + return; + dtors_run = true; + for (int i = 1; pfunc[i]; i++) (pfunc[i]) (); } @@ -72,6 +77,8 @@ dll::init () /* Why didn't we just import this variable? */ *(p.envptr) = __cygwin_environ; + p.dtors_run = false; + /* Don't run constructors or the "main" if we've forked. */ if (!in_forkee) { diff --git a/winsup/cygwin/dll_init.h b/winsup/cygwin/dll_init.h index bc9687b..848d4d5 100644 --- a/winsup/cygwin/dll_init.h +++ b/winsup/cygwin/dll_init.h @@ -13,6 +13,7 @@ struct per_module char ***envptr; void (**ctors)(void); void (**dtors)(void); + bool dtors_run; void *data_start; void *data_end; void *bss_start; |