]> granicus.if.org Git - gc/commitdiff
2009-10-09 Ivan Maidanski <ivmai@mail.ru>
authorivmai <ivmai>
Fri, 9 Oct 2009 07:04:46 +0000 (07:04 +0000)
committerIvan Maidanski <ivmai@mail.ru>
Tue, 26 Jul 2011 17:06:50 +0000 (21:06 +0400)
* alloc.c (GC_start_call_back): Move the variable definition from
misc.c.
* include/private/gc_priv.h (GC_start_call_back): Remove the
declaration.
* alloc.c (GC_notify_full_gc): Remove unnecessary cast of 0.
* alloc.c (GC_try_to_collect_inner): Also call stop_func at the
beginning of the function.
* include/gc.h (GC_try_to_collect): Refine the comment about
stop_func.

ChangeLog
alloc.c
include/gc.h
include/private/gc_priv.h
misc.c

index 0cd3f0b6d46c529a09eb3b474ef1d94bf615788e..68f7c0b0fa9d625ddee778b8e566fb6d16f4ca33 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2009-10-09  Ivan Maidanski <ivmai@mail.ru>
+
+       * alloc.c (GC_start_call_back): Move the variable definition from
+       misc.c.
+       * include/private/gc_priv.h (GC_start_call_back): Remove the
+       declaration.
+       * alloc.c (GC_notify_full_gc): Remove unnecessary cast of 0.
+       * alloc.c (GC_try_to_collect_inner): Also call stop_func at the
+       beginning of the function.
+       * include/gc.h (GC_try_to_collect): Refine the comment about
+       stop_func.
+
 2009-10-08  Ivan Maidanski <ivmai@mail.ru>
 
        * alloc.c (GC_default_stop_func, GC_try_to_collect_general,
diff --git a/alloc.c b/alloc.c
index 4e26a0d4beff9ae1f20ba2d175c7452ce4834708..76a7a935a0a29f65441aef192cfa07eb41d12342 100644 (file)
--- a/alloc.c
+++ b/alloc.c
@@ -291,10 +291,14 @@ GC_bool GC_should_collect(void)
            || GC_heapsize >= GC_collect_at_heapsize);
 }
 
+/* STATIC */ void (*GC_start_call_back) (void) = 0;
+                        /* Called at start of full collections.         */
+                        /* Not called if 0.  Called with the allocation */
+                        /* lock held.  Not used by GC itself.           */
 
 STATIC void GC_notify_full_gc(void)
 {
-    if (GC_start_call_back != (void (*) (void))0) {
+    if (GC_start_call_back != 0) {
         (*GC_start_call_back)();
     }
 }
@@ -379,7 +383,7 @@ GC_bool GC_try_to_collect_inner(GC_stop_func stop_func)
       CLOCK_TYPE current_time;
 #   endif
     ASSERT_CANCEL_DISABLED();
-    if (GC_dont_gc) return FALSE;
+    if (GC_dont_gc || (*stop_func)()) return FALSE;
     if (GC_incremental && GC_collection_in_progress()) {
       if (GC_print_stats) {
         GC_log_printf(
@@ -387,7 +391,7 @@ GC_bool GC_try_to_collect_inner(GC_stop_func stop_func)
       }
       /* Just finish collection already in progress.    */
         while(GC_collection_in_progress()) {
-            if (stop_func()) return(FALSE);
+            if ((*stop_func)()) return(FALSE);
             GC_collect_a_little_inner(1);
         }
     }
index 787a504c892ba37d9fa64eac930341ab8a4657a6..e86760f86788a772b9621c8911fa9c38ee8435e3 100644 (file)
@@ -483,8 +483,8 @@ GC_API void GC_CALL GC_gcollect_and_unmap(void);
 /* Trigger a full world-stopped collection.  Abort the collection if    */
 /* and when stop_func returns a nonzero value.  Stop_func will be       */
 /* called frequently, and should be reasonably fast.  (stop_func is     */
-/* called with the allocation lock held and the world is stopped; it is */
-/* not allowed for stop_func to manipulate pointers to the garbage      */
+/* called with the allocation lock held and the world might be stopped; */
+/* it's not allowed for stop_func to manipulate pointers to the garbage */
 /* collected heap or call most of GC functions.)  This works even       */
 /* if virtual dirty bits, and hence incremental collection is not       */
 /* available for this architecture.  Collections can be aborted faster  */
index 1eed069477bdcef4fc8608b4e913eb3c1f921288..dc6f801f303700b07802042291704bc41fc6694b 100644 (file)
@@ -1453,11 +1453,6 @@ void GC_push_finalizer_structures(void);
 extern void (*GC_push_typed_structures)(void);
                         /* A pointer such that we can avoid linking in  */
                         /* the typed allocation support if unused.      */
-extern void (*GC_start_call_back)(void);
-                        /* Called at start of full collections.         */
-                        /* Not called if 0.  Called with allocation     */
-                        /* lock held.                                   */
-                        /* 0 by default.                                */
 
 void GC_push_regs(void);
 
diff --git a/misc.c b/misc.c
index 27fcdd60b445caae4ab8ddbae454855d3993a891..f1aa0378fab7270becdc7f257c94abe11362226a 100644 (file)
--- a/misc.c
+++ b/misc.c
@@ -75,8 +75,6 @@ GC_bool GC_debugging_started = FALSE;
 void (*GC_check_heap) (void) = 0;
 void (*GC_print_all_smashed) (void) = 0;
 
-void (*GC_start_call_back) (void) = 0;
-
 ptr_t GC_stackbottom = 0;
 
 #ifdef IA64