finetune view waiting
This commit is contained in:
parent
257423e917
commit
af399529ec
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user