public boolean takeRecoverySnapshot(DBChangeSet changeSet, TaskMonitor monitor)
			throws CancelledException, IOException {
		long cpNum;
		synchronized (this) {
			if (!bufferMgr.modifiedSinceSnapshot()) {
				return true;
			}
			if (txStarted) {
				return false;
			}
			if (lastRecoverySnapshotId == checkpointNum) {
				return true;
			}
			cpNum = checkpointNum;
		}
		if (!bufferMgr.takeRecoverySnapshot(changeSet, monitor)) {
			return false;
		}
		synchronized (this) {
			lastRecoverySnapshotId = cpNum;
		}
		return true;
	}
Request a recovery snapshot be taken of any unsaved changes;
@param changeSet an optional database-backed change set which reflects changes 
made since the last version.
@param monitor task monitor
@return true if snapshot successful or not needed, false if an active transaction prevented snapshot
@throws CancelledException if cancelled by monitor
@throws IOException if IO error occurs
Ghidra/Framework/DB/src/main/java/db/DBHandle.java