Repository : ssh://darcs.haskell.org//srv/darcs/ghc

On branch  : master

http://hackage.haskell.org/trac/ghc/changeset/e88f1625a234e5316e903f84ae4d3349fec4bf3d

>---------------------------------------------------------------

commit e88f1625a234e5316e903f84ae4d3349fec4bf3d
Author: Duncan Coutts <[email protected]>
Date:   Wed Feb 22 01:41:29 2012 +0000

    Move trace of cap delete from shutdownCapability to freeCapability
    
    Will let us do final per-cap trace events from stat_exit().
    Otherwise we would end up with eventlogs with events for caps
    that have already been deleted.

>---------------------------------------------------------------

 rts/Capability.c |   28 +++++++---------------------
 1 files changed, 7 insertions(+), 21 deletions(-)

diff --git a/rts/Capability.c b/rts/Capability.c
index 564953b..7b1a110 100644
--- a/rts/Capability.c
+++ b/rts/Capability.c
@@ -845,10 +845,8 @@ tryGrabCapability (Capability *cap, Task *task)
  *
  * ------------------------------------------------------------------------- */
 
-static void traceShutdownCapability (Capability *cap);
-
 void
-shutdownCapability (Capability *cap,
+shutdownCapability (Capability *cap USED_IF_THREADS,
                     Task *task USED_IF_THREADS,
                     rtsBool safe USED_IF_THREADS)
 {
@@ -933,7 +931,7 @@ shutdownCapability (Capability *cap,
             continue;
         }
 
-        traceShutdownCapability(cap);
+        traceSparkCounters(cap);
        RELEASE_LOCK(&cap->lock);
        break;
     }
@@ -944,23 +942,9 @@ shutdownCapability (Capability *cap,
     // threads performing foreign calls that will eventually try to 
     // return via resumeThread() and attempt to grab cap->lock.
     // closeMutex(&cap->lock);
-
-#else /* THREADED_RTS */
-    traceShutdownCapability(cap);
 #endif
 }
 
-static void
-traceShutdownCapability (Capability *cap)
-{
-#if defined(THREADED_RTS)
-    traceSparkCounters(cap);
-#endif
-    traceCapsetRemoveCap(CAPSET_OSPROCESS_DEFAULT, cap->no);
-    traceCapsetRemoveCap(CAPSET_CLOCKDOMAIN_DEFAULT, cap->no);
-    traceCapDelete(cap);
-}
-
 void
 shutdownCapabilities(Task *task, rtsBool safe)
 {
@@ -969,9 +953,6 @@ shutdownCapabilities(Task *task, rtsBool safe)
         ASSERT(task->incall->tso == NULL);
         shutdownCapability(&capabilities[i], task, safe);
     }
-    traceCapsetDelete(CAPSET_OSPROCESS_DEFAULT);
-    traceCapsetDelete(CAPSET_CLOCKDOMAIN_DEFAULT);
-
 #if defined(THREADED_RTS)
     ASSERT(checkSparkCountInvariant());
 #endif
@@ -985,6 +966,9 @@ freeCapability (Capability *cap)
 #if defined(THREADED_RTS)
     freeSparkPool(cap->sparks);
 #endif
+    traceCapsetRemoveCap(CAPSET_OSPROCESS_DEFAULT, cap->no);
+    traceCapsetRemoveCap(CAPSET_CLOCKDOMAIN_DEFAULT, cap->no);
+    traceCapDelete(cap);
 }
 
 void
@@ -998,6 +982,8 @@ freeCapabilities (void)
 #else
     freeCapability(&MainCapability);
 #endif
+    traceCapsetDelete(CAPSET_OSPROCESS_DEFAULT);
+    traceCapsetDelete(CAPSET_CLOCKDOMAIN_DEFAULT);
 }
 
 /* ---------------------------------------------------------------------------



_______________________________________________
Cvs-ghc mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/cvs-ghc

Reply via email to