lock.release();
  public static void ensureMapped(VM_Address start, int blocks) {    int startChunk = Conversions.addressToMmapChunks(start);       // round down    int endChunk = Conversions.addressToMmapChunks(start.add(Conversions.blocksToBytes(blocks)));       // round down    lock.acquire();    for (int chunk=startChunk; chunk <= endChunk; chunk++) {      VM_Address mmapStart = Conversions.mmapChunksToAddress(chunk);      if (mapped[chunk] == UNMAPPED) {	int errno = VM_Interface.mmap(mmapStart, MMAP_CHUNK_SIZE);	if (errno != 0) {	  lock.release();	  VM.sysWrite("ensureMapped failed with errno ", errno);	  VM.sysWriteln(" on address ", mmapStart);	  VM._assert(false);	}	else {	  if (verbose) {	    VM.sysWrite("mmap succeeded at chunk ", chunk);  VM.sysWrite("  ", mmapStart);	    VM.sysWriteln(" with len = ", MMAP_CHUNK_SIZE);	  }	}      }      if (mapped[chunk] == PROTECTED) {	if (!VM_Interface.munprotect(mmapStart, MMAP_CHUNK_SIZE)) {	  lock.release(); 	  VM.sysFail("LazyMmapper.ensureMapped (unprotect) failed");	}	else {	  if (verbose) {	    VM.sysWrite("munprotect succeeded at chunk ", chunk);  VM.sysWrite("  ", mmapStart);	    VM.sysWriteln(" with len = ", MMAP_CHUNK_SIZE);	  }	}      }      mapped[chunk] = MAPPED;    }    lock.release();  }