OSDN Git Service

2002-04-16 Thomas Pfaff <tpfaff@gmx.net>
authorrbcollins <rbcollins>
Fri, 19 Apr 2002 12:46:18 +0000 (12:46 +0000)
committerrbcollins <rbcollins>
Fri, 19 Apr 2002 12:46:18 +0000 (12:46 +0000)
        * 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.

winsup/cygwin/ChangeLog
winsup/cygwin/dll_init.cc
winsup/cygwin/dll_init.h

index de3ac03..553bd34 100644 (file)
@@ -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
index e5e650f..4ff740c 100644 (file)
@@ -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)
     {
index bc9687b..848d4d5 100644 (file)
@@ -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;