private <T> T withLock(Callable<T> c) {

		try {
			writeLock.acquire();
			T result;
			try {
				result = c.call();
				return result;
			}
			catch (Exception e) {
				// sholudn't happen
				Msg.error(this, "Exception while updating change records", e);
				return null;
			}
		}
		finally {
			writeLock.release();
		}
	}
Constructs a new DomainObjectChangeSupport object.

@param src The object to be put as the src for all events generated.
@param timeInterval The time (in milliseconds) this object will wait before flushing its
event buffer. If a new event comes in before the time expires, the timer is reset.
@param lock the lock used to verify that calls to {@link #flush()} are not performed while a
lock is held; this is the lock to guard the DB
Ghidra/Framework/Project/src/main/java/ghidra/framework/data/DomainObjectChangeSupport.java