Actually handle soft handshake requests on enterNative, instead of just saying we have.
1.1 --- a/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/Collection.java Mon Nov 08 19:10:52 2010 +0000
1.2 +++ b/MMTk/ext/vm/jikesrvm/org/jikesrvm/mm/mmtk/Collection.java Mon Nov 15 04:56:11 2010 +0000
1.3 @@ -138,14 +138,13 @@
1.4 new RVMThread.SoftHandshakeVisitor() {
1.5 @Uninterruptible
1.6 public boolean checkAndSignal(RVMThread t) {
1.7 - // PNT: maybe we should return false if it's a GC thread?
1.8 - t.flushRequested=true;
1.9 + t.flushRequested = true;
1.10 return true;
1.11 }
1.12 @Uninterruptible
1.13 public void notifyStuckInNative(RVMThread t) {
1.14 t.flush();
1.15 - t.flushRequested=false;
1.16 + t.flushRequested = false;
1.17 }
1.18 @Uninterruptible
1.19 public boolean includeThread(RVMThread t) {
2.1 --- a/rvm/src/org/jikesrvm/scheduler/RVMThread.java Mon Nov 08 19:10:52 2010 +0000
2.2 +++ b/rvm/src/org/jikesrvm/scheduler/RVMThread.java Mon Nov 15 04:56:11 2010 +0000
2.3 @@ -1845,6 +1845,7 @@
2.4 setExecStatus(BLOCKED_IN_NATIVE);
2.5 }
2.6 acknowledgeBlockRequests();
2.7 + handleHandshakeRequest();
2.8 commitSoftRendezvous = softRendezvousCheckAndClear();
2.9 monitor().unlock();
2.10 if (traceBlock)
2.11 @@ -3389,6 +3390,7 @@
2.12 // process memory management requests
2.13 if (flushRequested && activeMutatorContext) {
2.14 MemoryManager.flushMutatorContext();
2.15 + flushRequested = false;
2.16 }
2.17 // not really a "soft handshake" request but we handle it here anyway
2.18 if (asyncDebugRequestedForThisThread) {