Call the registered exit functions if the dll is unloaded. Modified: trunk/reactos/lib/crt/stdlib/_exit.c Modified: trunk/reactos/lib/crt/stdlib/atexit.c Modified: trunk/reactos/lib/crtdll/dllmain.c Modified: trunk/reactos/lib/msvcrt/dllmain.c _____
Modified: trunk/reactos/lib/crt/stdlib/_exit.c --- trunk/reactos/lib/crt/stdlib/_exit.c 2005-08-11 19:11:17 UTC (rev 17293) +++ trunk/reactos/lib/crt/stdlib/_exit.c 2005-08-11 19:32:02 UTC (rev 17294) @@ -12,13 +12,7 @@
void exit(int status) { //int i; - struct __atexit *a = __atexit_ptr; - __atexit_ptr = 0; /* to prevent infinite loops */ - while (a) - { - (a->__function)(); - a = a->__next; - } + /* if (__stdio_cleanup_hook) __stdio_cleanup_hook(); _____
Modified: trunk/reactos/lib/crt/stdlib/atexit.c --- trunk/reactos/lib/crt/stdlib/atexit.c 2005-08-11 19:11:17 UTC (rev 17293) +++ trunk/reactos/lib/crt/stdlib/atexit.c 2005-08-11 19:32:02 UTC (rev 17294) @@ -2,6 +2,19 @@
#include <stdlib.h> #include <internal/atexit.h>
+void _atexit_cleanup(void) +{ + struct __atexit *next, *a = __atexit_ptr; + __atexit_ptr = 0; /* to prevent infinite loops */ + while (a) + { + (a->__function)(); + next = a->__next; + free(a); + a = next; + } +} + /* * @implemented * _____
Modified: trunk/reactos/lib/crtdll/dllmain.c --- trunk/reactos/lib/crtdll/dllmain.c 2005-08-11 19:11:17 UTC (rev 17293) +++ trunk/reactos/lib/crtdll/dllmain.c 2005-08-11 19:32:02 UTC (rev 17294) @@ -38,6 +38,7 @@
extern int BlockEnvToEnvironA(void); extern int BlockEnvToEnvironW(void); extern void FreeEnvironment(char **environment); +extern void _atexit_cleanup(void);
extern unsigned int _osver; extern unsigned int _winminor; @@ -174,6 +175,7 @@ DPRINT("Detach %d\n", nAttachCount); /* FIXME: more cleanup... */ _fcloseall(); + _atexit_cleanup();
/* destroy tls stuff */ DestroyThreadData(); _____
Modified: trunk/reactos/lib/msvcrt/dllmain.c --- trunk/reactos/lib/msvcrt/dllmain.c 2005-08-11 19:11:17 UTC (rev 17293) +++ trunk/reactos/lib/msvcrt/dllmain.c 2005-08-11 19:32:02 UTC (rev 17294) @@ -37,6 +37,7 @@
extern int BlockEnvToEnvironA(void); extern int BlockEnvToEnvironW(void); extern void FreeEnvironment(char **environment); +extern void _atexit_cleanup(void);
extern unsigned int _osver; extern unsigned int _winminor; @@ -116,6 +117,7 @@ //DPRINT("Detach\n"); /* FIXME: more cleanup... */ _fcloseall(); + _atexit_cleanup();
/* destroy tls stuff */ DestroyThreadData();