SF.net SVN: jikesrvm:[15745] rvmroot/trunk/MMTk/harness

View: New views
1 Messages — Rating Filter:   Alert me  

SF.net SVN: jikesrvm:[15745] rvmroot/trunk/MMTk/harness

by rgarner :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Revision: 15745
          http://jikesrvm.svn.sourceforge.net/jikesrvm/?rev=15745&view=rev
Author:   rgarner
Date:     2009-07-24 06:35:27 +0000 (Fri, 24 Jul 2009)

Log Message:
-----------
MMTk Harness - make script-language barriers work across GCs.

Modified Paths:
--------------
    rvmroot/trunk/MMTk/harness/src/org/mmtk/harness/scheduler/javathreads/JavaThreadModel.java
    rvmroot/trunk/MMTk/harness/src/org/mmtk/harness/scheduler/rawthreads/RawThreadModel.java
    rvmroot/trunk/MMTk/harness/test-scripts/SpreadAlloc16.script
    rvmroot/trunk/MMTk/harness/test-scripts/lang/barriers.script

Modified: rvmroot/trunk/MMTk/harness/src/org/mmtk/harness/scheduler/javathreads/JavaThreadModel.java
===================================================================
--- rvmroot/trunk/MMTk/harness/src/org/mmtk/harness/scheduler/javathreads/JavaThreadModel.java 2009-07-23 14:39:56 UTC (rev 15744)
+++ rvmroot/trunk/MMTk/harness/src/org/mmtk/harness/scheduler/javathreads/JavaThreadModel.java 2009-07-24 06:35:27 UTC (rev 15745)
@@ -275,7 +275,14 @@
 
   @Override
   public int mutatorRendezvous(String where, int expected) {
-    return Rendezvous.rendezvous(where,expected);
+    synchronized (count) {
+      mutatorsWaitingForGC++;
+    }
+    int ordinal = Rendezvous.rendezvous(where,expected);
+    synchronized (count) {
+      mutatorsWaitingForGC--;
+    }
+    return ordinal;
   }
 
   @Override

Modified: rvmroot/trunk/MMTk/harness/src/org/mmtk/harness/scheduler/rawthreads/RawThreadModel.java
===================================================================
--- rvmroot/trunk/MMTk/harness/src/org/mmtk/harness/scheduler/rawthreads/RawThreadModel.java 2009-07-23 14:39:56 UTC (rev 15744)
+++ rvmroot/trunk/MMTk/harness/src/org/mmtk/harness/scheduler/rawthreads/RawThreadModel.java 2009-07-24 06:35:27 UTC (rev 15745)
@@ -362,7 +362,6 @@
             break;
           case BEGIN_GC:
             if (runQueue.isEmpty()) {
-              assert gcWaitQueue.size() == mutators.size();
               setState(GC);
               Trace.trace(Item.SCHEDULER, "%d: Changing to state GC - scheduling %d GC threads",
                   scheduler.getId(),collectorWaitQueue.size());

Modified: rvmroot/trunk/MMTk/harness/test-scripts/SpreadAlloc16.script
===================================================================
--- rvmroot/trunk/MMTk/harness/test-scripts/SpreadAlloc16.script 2009-07-23 14:39:56 UTC (rev 15744)
+++ rvmroot/trunk/MMTk/harness/test-scripts/SpreadAlloc16.script 2009-07-24 06:35:27 UTC (rev 15745)
@@ -33,9 +33,11 @@
   int large = 2500;               // # scalars in the largest object
   int i=0;
   
+  barrierWait("begin",32);
   object parent = alloc(live, 0, false);       // Parent object with 'live' pointers
   while (i < n) {             // loop for a while
     parent.object[i%live] = alloc(0, random(small,large), false);
     i = i + 1;                // loop counter
   }
+  barrierWait("end",32);
 }

Modified: rvmroot/trunk/MMTk/harness/test-scripts/lang/barriers.script
===================================================================
--- rvmroot/trunk/MMTk/harness/test-scripts/lang/barriers.script 2009-07-23 14:39:56 UTC (rev 15744)
+++ rvmroot/trunk/MMTk/harness/test-scripts/lang/barriers.script 2009-07-24 06:35:27 UTC (rev 15745)
@@ -15,14 +15,29 @@
  * Test synchronization barriers
  */
 void main() {
-  spawn(thread);
-  spawn(thread);
+  spawn(thread1);
+  spawn(thread1);
   barrierWait("finish",3);
-  print("Exit");
+  print("Phase 1 - complete");
+  
+  spawn(thread2);
+  spawn(thread2);
+  barrierWait("thread2-begin",3);
+  // Pause for a while
+  int i=0;
+  while (i < 1000) {
+    object tmp = alloc(10,10);
+    i = i + 1;
+  }
+  print("Phase 2 - requesting GC");
+  gc();
+  print("Phase 2 - GC complete");
+  barrierWait("thread2-end",3);  
+  print("Phase 2 - end");
 }
 
 
-void thread() {
+void thread1() {
   barrierWait("begin",2);
   print("Reached barrier <begin>");
   int ordinal = barrierWait("end",2);
@@ -30,4 +45,12 @@
     print("First thread");
   }
   barrierWait("finish",3);
+}
+
+void thread2() {
+  print("thread2 starting");
+  barrierWait("thread2-begin",3);
+  print("thread2 middle");
+  barrierWait("thread2-end",3);
+  print("thread2 end");
 }
\ No newline at end of file


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.

------------------------------------------------------------------------------
_______________________________________________
Jikesrvm-commits mailing list
Jikesrvm-commits@...
https://lists.sourceforge.net/lists/listinfo/jikesrvm-commits