VM.assert(VM_Scheduler.numProcessors == 1 || pid != VM_Scheduler.numProcessors) ;
VM._assert(VM_Scheduler.numProcessors == 1 || pid != VM_Scheduler.numProcessors) ;
    private static final void collectGarbageOrAwaitCompletion (String originator) {	if (GC_TRIGGERGC) 	    VM_Scheduler.trace(originator, "Triggered garbage collection");	double startTime = VM_Time.now();	if (gcInProgress) {	    int pid = VM_Processor.getCurrentProcessor().id;	    if (VM.VerifyAssertions) 		VM.assert(VM_Scheduler.numProcessors == 1 || pid != VM_Scheduler.numProcessors) ;	    else if (VM_Scheduler.numProcessors != 1 && pid == VM_Scheduler.numProcessors)		return;		// don't suspend GC while GCing	    // This should be true; for now, make it so.	    // VM.assert(VM_Thread.getCurrentThread().processorAffinity != null);	    if (VM_Thread.getCurrentThread().processorAffinity == null)		VM_Thread.getCurrentThread().processorAffinity = VM_Processor.getCurrentProcessor();	    // heapInfo();	// see what's happening before we choke	    VM_Scheduler.gcWaitMutex.lock();	    VM_Thread.getCurrentThread().yield(VM_Scheduler.gcWaitQueue, VM_Scheduler.gcWaitMutex);	    freeBlocks(VM_Processor.getCurrentProcessor());	    // heapInfo();	// and after	    double pauseTime = VM_Time.now() - startTime;	    if (SHOW_ALLOCATION_DELAY) {		VM.sysWrite("$$$$ Processor "); VM.sysWrite(pid, false);		VM.sysWrite(" suspended from ");  VM.sysWrite(originator);		VM.sysWrite(" for ");  VM.sysWrite((int)(pauseTime*1000000.0), false);		VM.sysWrite(" usec\n");	    }	} else {	    // VM.sysWrite("+");	    gc1();	}    }