public synchronized void save(String comment, DBChangeSet changeSet, TaskMonitor monitor)
			throws IOException, CancelledException {

//TODO: Does not throw ReadOnlyException - should it?

		checkIsClosed();

		if (txStarted) {
			throw new AssertException("Can't save during transaction");
		}

		try {
			long txId = startTransaction();
			try {
				masterTable.flush();
			}
			finally {
				endTransaction(txId, true); // saved file may be corrupt on IOException
			}

			bufferMgr.save(comment, changeSet, monitor);
		}
		finally {
			cacheChangedState();
		}
	}
Save this database to a new version.
@param comment if version history is maintained, this comment will be 
associated with the new version.
@param changeSet an optional database-backed change set which reflects changes 
made since the last version.
@param monitor progress monitor
@throws CancelledException if task monitor cancelled operation.
@throws IOException thrown if an IO error occurs.
Ghidra/Framework/DB/src/main/java/db/DBHandle.java