projects
/
ghc-hetmet.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
a6ba970
)
overlap checking of the black hole queue with waiting for GC threads
author
Simon Marlow
<marlowsd@gmail.com>
Thu, 15 Oct 2009 09:07:56 +0000
(09:07 +0000)
committer
Simon Marlow
<marlowsd@gmail.com>
Thu, 15 Oct 2009 09:07:56 +0000
(09:07 +0000)
rts/Schedule.c
patch
|
blob
|
history
diff --git
a/rts/Schedule.c
b/rts/Schedule.c
index
302ec1e
..
167cac1
100644
(file)
--- a/
rts/Schedule.c
+++ b/
rts/Schedule.c
@@
-1418,6
+1418,18
@@
scheduleDoGC (Capability *cap, Task *task USED_IF_THREADS, rtsBool force_major)
if (gc_type == PENDING_GC_SEQ)
{
traceSchedEvent(cap, EVENT_REQUEST_SEQ_GC, 0, 0);
if (gc_type == PENDING_GC_SEQ)
{
traceSchedEvent(cap, EVENT_REQUEST_SEQ_GC, 0, 0);
+ }
+ else
+ {
+ traceSchedEvent(cap, EVENT_REQUEST_PAR_GC, 0, 0);
+ debugTrace(DEBUG_sched, "ready_to_gc, grabbing GC threads");
+ }
+
+ // do this while the other Capabilities stop:
+ if (cap) scheduleCheckBlackHoles(cap);
+
+ if (gc_type == PENDING_GC_SEQ)
+ {
// single-threaded GC: grab all the capabilities
for (i=0; i < n_capabilities; i++) {
debugTrace(DEBUG_sched, "ready_to_gc, grabbing all the capabilies (%d/%d)", i, n_capabilities);
// single-threaded GC: grab all the capabilities
for (i=0; i < n_capabilities; i++) {
debugTrace(DEBUG_sched, "ready_to_gc, grabbing all the capabilies (%d/%d)", i, n_capabilities);
@@
-1440,16
+1452,10
@@
scheduleDoGC (Capability *cap, Task *task USED_IF_THREADS, rtsBool force_major)
{
// multi-threaded GC: make sure all the Capabilities donate one
// GC thread each.
{
// multi-threaded GC: make sure all the Capabilities donate one
// GC thread each.
- traceSchedEvent(cap, EVENT_REQUEST_PAR_GC, 0, 0);
- debugTrace(DEBUG_sched, "ready_to_gc, grabbing GC threads");
-
waitForGcThreads(cap);
}
#endif
waitForGcThreads(cap);
}
#endif
- // so this happens periodically:
- if (cap) scheduleCheckBlackHoles(cap);
-
IF_DEBUG(scheduler, printAllThreads());
delete_threads_and_gc:
IF_DEBUG(scheduler, printAllThreads());
delete_threads_and_gc: