requestAndAwaitCompletion() {
void requestAndAwaitCompletion() throws VM_PragmaInterruptible {
    requestAndAwaitCompletion() {    synchronized (this) {      if (completionFlag) {	if (trace) VM_Scheduler.trace("VM_Handshake", "mutator: already completed");	return;      }      if (requestFlag) {	if (trace) VM_Scheduler.trace("VM_Handshake", "mutator: already in progress");      }      else {	// first mutator initiates collection by making all gc threads runnable at high priority	if (trace) VM_Scheduler.trace("VM_Handshake", "mutator: initiating collection");	VM_CollectorThread.gcBarrier.rendezvousStartTime = VM_Time.now();	requestFlag = true;	initiateCollection();      }    }  // end of synchronized block        // allow a gc thread to run    VM_Thread.getCurrentThread().yield();        if (trace) VM_Scheduler.trace("VM_Handshake", "mutator: running");  }