mirror of
https://github.com/OpenHFT/Chronicle-Map.git
synced 2021-09-13 01:26:12 +00:00
Update delayed check sum on WriteLock.unlock(), and close stages only if unlocking actually done
This commit is contained in:
@@ -101,10 +101,12 @@ public class ReadLock implements InterProcessLock {
|
||||
@Override
|
||||
public void unlock() {
|
||||
checkOnEachPublicOperation.checkOnEachLockOperation();
|
||||
// TODO what should close here?
|
||||
hlp.closeHashLookupPos();
|
||||
entry.closePos();
|
||||
entry.closeKeyOffset();
|
||||
if (s.localLockState != UNLOCKED) {
|
||||
// TODO what should close here?
|
||||
hlp.closeHashLookupPos();
|
||||
entry.closePos();
|
||||
entry.closeKeyOffset();
|
||||
}
|
||||
s.readUnlockAndDecrementCount();
|
||||
s.setLocalLockState(UNLOCKED);
|
||||
}
|
||||
|
||||
@@ -172,18 +172,19 @@ public class UpdateLock implements InterProcessLock {
|
||||
@Override
|
||||
public void unlock() {
|
||||
checkOnEachPublicOperation.checkOnEachLockOperation();
|
||||
entry.closeDelayedUpdateChecksum();
|
||||
switch (s.localLockState) {
|
||||
case UNLOCKED:
|
||||
case READ_LOCKED:
|
||||
return;
|
||||
case UPDATE_LOCKED:
|
||||
entry.closeDelayedUpdateChecksum();
|
||||
if (s.decrementUpdate() == 0) {
|
||||
if (s.writeZero())
|
||||
s.segmentHeader.downgradeUpdateToReadLock(s.segmentHeaderAddress);
|
||||
}
|
||||
break;
|
||||
case WRITE_LOCKED:
|
||||
entry.closeDelayedUpdateChecksum();
|
||||
if (s.decrementWrite() == 0) {
|
||||
if (!s.updateZero()) {
|
||||
s.segmentHeader.downgradeWriteToUpdateLock(s.segmentHeaderAddress);
|
||||
|
||||
@@ -32,6 +32,7 @@ public class WriteLock implements InterProcessLock {
|
||||
|
||||
@StageRef CheckOnEachPublicOperation checkOnEachPublicOperation;
|
||||
@StageRef SegmentStages s;
|
||||
@StageRef HashEntryStages<?> entry;
|
||||
|
||||
@Override
|
||||
public boolean isHeldByCurrentThread() {
|
||||
@@ -247,6 +248,7 @@ public class WriteLock implements InterProcessLock {
|
||||
case UPDATE_LOCKED:
|
||||
return;
|
||||
case WRITE_LOCKED:
|
||||
entry.closeDelayedUpdateChecksum();
|
||||
if (s.decrementWrite() == 0)
|
||||
s.segmentHeader.downgradeWriteToUpdateLock(s.segmentHeaderAddress);
|
||||
s.incrementUpdate();
|
||||
|
||||
Reference in New Issue
Block a user