Public API (GC_deinit) to allow Win32 critical sections deletion
authorTautvydas Zilys <tautvydas.zilys@gmail.com>
Wed, 19 Jul 2017 21:53:43 +0000 (00:53 +0300)
committerIvan Maidanski <ivmai@mail.ru>
Wed, 19 Jul 2017 22:05:50 +0000 (01:05 +0300)
commit72ba00903f12a1a83359599c08ca50625981f0a3
treeae2b728a148edd6d15e1f63df56c428512a9397b
parentba53c6d65ce1815eb076de44554c43de0acf591d
Public API (GC_deinit) to allow Win32 critical sections deletion

Public GC_deinit allows the clients to avoid a leak of two critical
sections on GC shutdown.

* include/gc.h (GC_deinit): New public function declaration.
* include/private/gc_priv.h [MSWIN32 || MSWINCE] (GC_deinit): Remove.
* misc.c (GC_deinit): Make it public; define it unconditionally; call
DeleteCriticalSection(GC_allocate_ml) if GC_is_initialized; set
GC_is_initialized to false.
DeleteCriticalSection(GC_allocate_ml)
* tests/test.c [!GC_WIN32_THREADS && !GC_PTHREADS && CPPCHECK] (main):
Add UNTESTED(GC_deinit).
* win32_threads.c [GC_WINMAIN_REDIRECT && MSWINCE] (WinMain): Do not
call DeleteCriticalSection(GC_allocate_ml).
* win32_threads.c [!GC_NO_THREADS_DISCOVERY && !GC_PTHREADS]
(GC_DllMain): Likewise.
include/gc.h
include/private/gc_priv.h
misc.c
tests/test.c
win32_threads.c