From 32aecc7f9509b39f27f3b05427a8eebca6140f19 Mon Sep 17 00:00:00 2001 From: Massimiliano Mantione Date: Thu, 7 Feb 2008 09:51:20 +0000 Subject: [PATCH] * include/gc.h: (GCEventType): Added start-stop the world events. * pthread_stop_world.c: (GC_stop_world and GC_start_world): hooked svn path=/trunk/mono/; revision=95125 --- ChangeLog | 5 +++++ include/gc.h | 6 +++++- pthread_stop_world.c | 8 ++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 3221d772..3bfe49b6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2008-02-07 Massimiliano Mantione + * include/gc.h: (GCEventType): Added start-stop the world events. + * pthread_stop_world.c: (GC_stop_world and GC_start_world): hooked + start-stop the world events. + 2007-11-05 Geoff Norton * darwin_stop_world.c: Correct the structure name on Darwin-x86 for Leopard. diff --git a/include/gc.h b/include/gc.h index ba73ea09..375cc18a 100644 --- a/include/gc.h +++ b/include/gc.h @@ -98,7 +98,11 @@ typedef enum { GC_EVENT_MARK_END, GC_EVENT_RECLAIM_START, GC_EVENT_RECLAIM_END, - GC_EVENT_END + GC_EVENT_END, + GC_EVENT_PRE_STOP_WORLD, + GC_EVENT_POST_STOP_WORLD, + GC_EVENT_PRE_START_WORLD, + GC_EVENT_POST_START_WORLD } GCEventType; GC_API void (*GC_notify_event) GC_PROTO((GCEventType event_type)); diff --git a/pthread_stop_world.c b/pthread_stop_world.c index 1ed16132..04eb3712 100644 --- a/pthread_stop_world.c +++ b/pthread_stop_world.c @@ -414,6 +414,8 @@ static void pthread_stop_world() /* Caller holds allocation lock. */ void GC_stop_world() { + if (GC_notify_event) + GC_notify_event (GC_EVENT_PRE_STOP_WORLD); /* Make sure all free list construction has stopped before we start. */ /* No new construction can start, since free list construction is */ /* required to acquire and release the GC lock before it starts, */ @@ -433,6 +435,8 @@ void GC_stop_world() # ifdef PARALLEL_MARK GC_release_mark_lock(); # endif + if (GC_notify_event) + GC_notify_event (GC_EVENT_POST_STOP_WORLD); } /* Caller holds allocation lock, and has held it continuously since */ @@ -449,6 +453,8 @@ static void pthread_start_world() # if DEBUG_THREADS GC_printf0("World starting\n"); # endif + if (GC_notify_event) + GC_notify_event (GC_EVENT_PRE_START_WORLD); for (i = 0; i < THREAD_TABLE_SZ; i++) { for (p = GC_threads[i]; p != 0; p = p -> next) { @@ -488,6 +494,8 @@ static void pthread_start_world() } } + if (GC_notify_event) + GC_notify_event (GC_EVENT_POST_START_WORLD); #if DEBUG_THREADS GC_printf0("World started\n"); #endif -- 2.40.0