if (trace) VM_Scheduler.trace("VM_Handshake", "mutator: yielding to GC");
  public void requestAndAwaitCompletion() throws VM_PragmaInterruptible {    lock.acquire();    if (completionFlag) {      if (trace) VM_Scheduler.trace("VM_Handshake", "mutator: already completed");      lock.release();      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();    }    lock.release();          // allow a gc thread to run    VM_Thread.getCurrentThread().yield();        if (trace) VM_Scheduler.trace("VM_Handshake", "mutator: running");  }