https://git.reactos.org/?p=reactos.git;a=commitdiff;h=6c6d9bee68bc0068cede58b41a575fd923b04e01

commit 6c6d9bee68bc0068cede58b41a575fd923b04e01
Author:     Jérôme Gardou <jerome.gar...@reactos.org>
AuthorDate: Mon Dec 28 10:47:38 2020 +0100
Commit:     Jérôme Gardou <zefk...@users.noreply.github.com>
CommitDate: Wed Dec 30 19:03:52 2020 +0100

    [CRT] Do not call atexit at process initialization
    
    There is no guarantee that the underlying APIs are initialized at this point
    
    CORE-17362
---
 sdk/lib/crt/startup/crtexe.c  | 12 +++++++++---
 sdk/lib/crt/startup/gccmain.c |  2 --
 2 files changed, 9 insertions(+), 5 deletions(-)

diff --git a/sdk/lib/crt/startup/crtexe.c b/sdk/lib/crt/startup/crtexe.c
index efc29191191..a09d4b5b441 100644
--- a/sdk/lib/crt/startup/crtexe.c
+++ b/sdk/lib/crt/startup/crtexe.c
@@ -115,6 +115,10 @@ _CRTALLOC(".CRT$XCAA") _PVFV mingw_pcppinit = pre_cpp_init;
 
 extern int _MINGW_INSTALL_DEBUG_MATHERR;
 
+#ifdef __GNUC__
+extern void __do_global_dtors(void);
+#endif
+
 static int __cdecl
 pre_c_init (void)
 {
@@ -211,8 +215,6 @@ int __cdecl mainCRTStartup (void)
   return ret;
 }
 
-void __call_atexit();
-
 static
 __declspec(noinline)
 int __cdecl
@@ -326,7 +328,11 @@ __tmainCRTStartup (void)
 #endif
     mainret = main (argc, argv, envp);
 #endif
-    __call_atexit();
+
+#ifdef __GNUC__
+    __do_global_dtors();
+#endif
+
     if (!managedapp)
       exit (mainret);
 
diff --git a/sdk/lib/crt/startup/gccmain.c b/sdk/lib/crt/startup/gccmain.c
index a1cd04b026e..3370a126947 100644
--- a/sdk/lib/crt/startup/gccmain.c
+++ b/sdk/lib/crt/startup/gccmain.c
@@ -43,8 +43,6 @@ __do_global_ctors (void)
     {
       __CTOR_LIST__[i] ();
     }
-
-  atexit (__do_global_dtors);
 }
 
 static int initialized = 0;

Reply via email to