]> granicus.if.org Git - gc/commitdiff
New API function (GC_is_init_called) to check if BDWGC is initialized
authorIvan Maidanski <ivmai@mail.ru>
Mon, 16 Oct 2017 07:25:57 +0000 (10:25 +0300)
committerIvan Maidanski <ivmai@mail.ru>
Mon, 16 Oct 2017 07:25:57 +0000 (10:25 +0300)
Issue #186 (bdwgc).

* include/gc.h (GC_is_init_called): New API function declaration.
* misc.c (GC_is_init_called): New API function definition.
* tests/test.c (check_heap_stats): Add a test that GC is initialized.

include/gc.h
misc.c
tests/test.c

index 9c1406fc4adfe04db649e41982369b5a0cccf34d..a92b411557b0a7165bcbf4e6821cd34b08f84d33 100644 (file)
@@ -440,6 +440,10 @@ GC_API void GC_CALL GC_atfork_child(void);
 /* from the main program instead.                                       */
 GC_API void GC_CALL GC_init(void);
 
+/* Returns non-zero (TRUE) if and only if the collector is initialized  */
+/* (or, at least, the initialization is in progress).                   */
+GC_API int GC_CALL GC_is_init_called(void);
+
 /* Perform the collector shutdown.  (E.g. dispose critical sections on  */
 /* Win32 target.)  A duplicate invocation is a no-op.  GC_INIT should   */
 /* not be called after the shutdown.  See also GC_win32_free_heap().    */
diff --git a/misc.c b/misc.c
index e4607f6df4c6d938c0d5680fd4d80021d10dbc9e..399613cffc6f0e954920c63157505dd57ed7f104 100644 (file)
--- a/misc.c
+++ b/misc.c
@@ -748,6 +748,11 @@ GC_API void GC_CALL GC_get_heap_usage_safe(GC_word *pheap_size,
 
 GC_INNER GC_bool GC_is_initialized = FALSE;
 
+GC_API int GC_CALL GC_is_init_called(void)
+{
+  return GC_is_initialized;
+}
+
 #if (defined(MSWIN32) || defined(MSWINCE)) && defined(THREADS)
     GC_INNER CRITICAL_SECTION GC_write_cs;
 #endif
index 0489a6bb66a07ee0e65c89a3f1bf08c4f00fdc21..451bce3d5840249bc45f960191dd6fae1680e6bc 100644 (file)
@@ -1554,6 +1554,10 @@ void check_heap_stats(void)
 #   endif
     unsigned obj_count = 0;
 
+    if (!GC_is_init_called()) {
+      GC_printf("GC should be initialized!\n");
+      FAIL;
+    }
 #   ifdef VERY_SMALL_CONFIG
     /* The upper bounds are a guess, which has been empirically */
     /* adjusted.  On low end uniprocessors with incremental GC  */