if (block.allocCount == 0 && blockNumber != currentBlockNumber) { prevBlock.nextblock = block.nextblock; freeBlock(block, blockNumber); } else { prevBlock = block; } }
if (TIME_FREEBLOCKS) { int pause = (int) ((VM_Time.now() - startTime) * 1000000.0); VM.sysWrite("|||| freeBlocks: "); VM.sysWrite(pause, false); VM.sysWrite(" usec\n"); }  if (GC_TRACEALLOCATOR) VM_Scheduler.trace("VM_Allocator", "leaving freeBlocks: blocks_available =",blocks_available);
    static void freeBlocks (VM_SizeControl size) {	VM_BlockControl prevBlock = blocks[size.first_block];	int currentBlockNumber = size.current_block;	for (int blockNumber = prevBlock.nextblock; blockNumber != 0; blockNumber = prevBlock.nextblock) {	    VM_BlockControl block = blocks[blockNumber];	    if (block.allocCount == 0 && blockNumber != currentBlockNumber) {		prevBlock.nextblock = block.nextblock;		freeBlock(block, blockNumber);	    } else {		prevBlock = block;	    }	}	    }