@Override public <A> void update(long recid, A value, Serializer<A> serializer) { commitLock.readLock().lock(); try { uncommitedData = true; Lock lock = locks[Store.lockPos(recid)].writeLock(); lock.lock(); try { Object old = get(recid, serializer); for (Reference<Tx> txr : txs) { Tx tx = txr.get(); if (tx == null) continue; tx.old.putIfAbsent(recid, old); } super.update(recid, value, serializer); } finally { lock.unlock(); } } finally { commitLock.readLock().unlock(); } }
protected <A> void superUpdate(long recid, A value, Serializer<A> serializer) { assert (commitLock.isWriteLockedByCurrentThread()); super.update(recid, value, serializer); }