}
  private void removeProcessor( int id ) throws VM_PragmaUninterruptible {    VM_Processor vp = VM_Scheduler.processors[id];    // get processors collector thread off its transfer queue    vp.transferMutex.lock();    VM_Thread ct = vp.transferQueue.dequeueGCThread(null);    vp.transferMutex.unlock();    if (VM.VerifyAssertions) {      if (ct==null) {	VM_Scheduler.trace("removeProcessor", "no collector thread - dumping vp");	vp.dumpProcessorState();      }      VM.assert(ct.isGCThread == true);    }    // put it back on the global collector thread queue    VM_Scheduler.collectorMutex.lock();    VM_Scheduler.collectorQueue.enqueue(ct);    VM_Scheduler.collectorMutex.unlock();    // now set the counts field for the native daemon processor to -1,    // to indicate it is not participating, which will let the other    // participants (in above loop) complete and leave the rendezvous.    entryCounts[id] = -1;    // set VPs CollectorThread ordinal number negative to indicate not participating    VM_CollectorThread.collectorThreads[id].gcOrdinal = -1;    VM_Magic.sync();      // make other threads/processors see the update  }  // removeProcessor}