code: synchronized void deRegisterTx(long txId) {
  		activeTXs.remove(txId);
  		if (isSingleSession) {
  			//no need to record history
  			return;
  		}
  		
  		//cache only if there are active TXs
  		if (activeTXs.isEmpty()) {
  			updateHistory.clear();
  			updateSummary.clear();
  			return;
  		}
  		
  		endedTx.add(new Pair<>(latestTxId, txId));
  		
  		//drop all tx with END < min(active_start), i.e. drop all that ended before any of the 
  		//remaining active transactions started.
  		
  		long minOpenTx = activeTXs.getFirst();
  		while (!endedTx.isEmpty() && endedTx.getFirst().getA() < minOpenTx) {
  			long beginID = endedTx.getFirst().getB();
  			ArrayList<TxObjInfo> allUpdates = updateHistory.get(beginID);
  			if (allUpdates != null) {
  				for (TxObjInfo info: allUpdates) {
  					long oid = info.getOid();
  					long tx = updateSummary.get(oid).getTxId();
  					if (tx == beginID) {
  						updateSummary.remove(oid);
  					}
  				}
  				updateHistory.remove(beginID);
  			}
  			endedTx.removeFirst();
  		}
  	}
docs: Deregister the transaction.
  To be called after commit() or rollback().
  @param txId