finetune view waiting

This commit is contained in:
vyzo 2021-07-13 09:06:40 +03:00
parent 257423e917
commit af399529ec

View File

@ -150,6 +150,7 @@ type SplitStore struct {
txnViewsMx sync.Mutex txnViewsMx sync.Mutex
txnViewsCond sync.Cond txnViewsCond sync.Cond
txnViews int txnViews int
txnViewsWaiting bool
txnActive bool txnActive bool
txnProtect MarkSet txnProtect MarkSet
txnRefsMx sync.Mutex txnRefsMx sync.Mutex
@ -651,7 +652,7 @@ func (s *SplitStore) viewDone() {
defer s.txnViewsMx.Unlock() defer s.txnViewsMx.Unlock()
s.txnViews-- s.txnViews--
if s.txnViews == 0 { if s.txnViews == 0 && s.txnViewsWaiting {
s.txnViewsCond.Signal() s.txnViewsCond.Signal()
} }
} }
@ -660,9 +661,11 @@ func (s *SplitStore) viewWait() {
s.txnViewsMx.Lock() s.txnViewsMx.Lock()
defer s.txnViewsMx.Unlock() defer s.txnViewsMx.Unlock()
s.txnViewsWaiting = true
for s.txnViews > 0 { for s.txnViews > 0 {
s.txnViewsCond.Wait() s.txnViewsCond.Wait()
} }
s.txnViewsWaiting = false
} }
// transactionally protect a reference to an object // transactionally protect a reference to an object