code: public <Result> Result process(IUnitOfWork<Result, State> work) {
  		releaseReadLock();
  		acquireWriteLock();
  		try {
  			if (log.isTraceEnabled())
  				log.trace("process - " + Thread.currentThread().getName());
  			return modify(work);
  		} finally {
  			if (log.isTraceEnabled())
  				log.trace("Downgrading from write lock to read lock...");
  			acquireReadLock();
  			releaseWriteLock();
  		}
  	}
docs: Upgrades a read transaction to a write transaction, executes the work then downgrades to a read transaction
  again.
  
  @since 2.4
  @noreference