void removeMemoryBlock(Address startAddr, Address endAddr, TaskMonitor monitor)
			throws IOException {

		lock.acquire();
		try {
			AddressRangeIterator iter = fragMap.getAddressRanges(startAddr, endAddr);
			while (iter.hasNext() && !monitor.isCancelled()) {
				AddressRange range = iter.next();
				Field field = fragMap.getValue(range.getMinAddress());
				FragmentDB frag = getFragmentDB(field.getLongValue());
				frag.removeRange(
					new AddressRangeImpl(range.getMinAddress(), range.getMaxAddress()));
				if (frag.isEmpty()) {
					removeFragment(frag);
				}
			}
			if (monitor.isCancelled()) {
				return;
			}
			fragMap.clearRange(startAddr, endAddr);
			treeMgr.updateTreeRecord(record);
			invalidateCache();

		}
		finally {
			lock.release();
		}

	}
Construct a program tree module manager
@param treeMgr program tree manager
@param rec program tree record
@param openMode the mode this adapter is to be opened for (CREATE, UPDATE, READ_ONLY, UPGRADE).
@param monitor task monitor
@throws IOException if a database IO error occurs
@throws CancelledException if monitor cancelled (upgrade case only)
@throws VersionException if opening an existing program tree and an underlying table 
schema version differs from the expected version.
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/module/ModuleManager.java