tmp: usleep(1) during anyWork() if no work
[ghc-hetmet.git] / rts / sm / Scav.c
index b22f244..c284dee 100644 (file)
@@ -11,6 +11,8 @@
  *
  * ---------------------------------------------------------------------------*/
 
+#include <unistd.h>
+
 #include "Rts.h"
 #include "RtsFlags.h"
 #include "Storage.h"
@@ -1405,6 +1407,8 @@ scavenge_find_global_work (void)
     rtsBool flag;
     step_workspace *ws;
 
+    gct->scav_global_work++;
+
     flag = rtsFalse;
     for (s = total_steps-1; s>=0; s--)
     {
@@ -1457,6 +1461,8 @@ scavenge_find_local_work (void)
     step_workspace *ws;
     rtsBool flag;
 
+    gct->scav_local_work++;
+
     flag = rtsFalse;
     for (s = total_steps-1; s >= 0; s--) {
         if (s == 0 && RtsFlags.GcFlags.generations > 1) { 
@@ -1551,6 +1557,8 @@ any_work (void)
     int s;
     step_workspace *ws;
 
+    gct->any_work++;
+
     write_barrier();
 
     // scavenge static objects 
@@ -1576,5 +1584,8 @@ any_work (void)
         if (ws->stp->todos) return rtsTrue;
     }
 
+    gct->no_work++;
+    usleep(1);
+
     return rtsFalse;
 }