Wrapping atexit() is a bad idea on Windows, where the EXE and each DLL
authorTor Lillqvist <tml@novell.com>
Wed, 31 Aug 2005 21:02:47 +0000 (21:02 +0000)
committerTor Lillqvist <tml@src.gnome.org>
Wed, 31 Aug 2005 21:02:47 +0000 (21:02 +0000)
commit130763338c798d9df52591439e8c9d5ffed4611b
treea4afea5570dd9c4b145b0cb959d8fe892c4bc090
parent49003b01ff4d5617d27334ddbe2c9a3e518f000c
Wrapping atexit() is a bad idea on Windows, where the EXE and each DLL

2005-08-31  Tor Lillqvist  <tml@novell.com>

* glib/gutils.h: Wrapping atexit() is a bad idea on Windows, where
the EXE and each DLL have their own atexit function chains.

#define g_atexit as atexit instead. This means it has a
better chance of doing what the caller wants. For instance,
gtkhtml calls g_atexit() registering a function in gtkhtml
itself. This caused a crash when g_atexit() was implemented as a
function in the GLib DLL. The gtkhtml DLL was already unloaded by
the time the GLib DLL got unloaded.

* glib/gutils.c: #undef the #define mentioned above, to also get a
real g_atexit() into the DLL for backward compatibility. Document
the Windows behaviour of g_atexit(), and document the varying ways
atexit() can behave in the context of dynamically loaded modules
on Unix.
ChangeLog
ChangeLog.pre-2-10
ChangeLog.pre-2-12
glib/gutils.c
glib/gutils.h