Merge pull request #13505 from LeoYang90/fix_watchable_runlock

fix watchablestore runlock bug
This commit is contained in:
Piotr Tabor 2021-12-03 12:21:30 +01:00 committed by GitHub
commit 29292aa7bd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -355,8 +355,11 @@ func (s *watchableStore) syncWatchers() int {
tx := s.store.b.ReadTx()
tx.RLock()
revs, vs := tx.UnsafeRange(schema.Key, minBytes, maxBytes, 0)
tx.RUnlock()
evs := kvsToEvents(s.store.lg, wg, revs, vs)
// Must unlock after kvsToEvents, because vs (come from boltdb memory) is not deep copy.
// We can only unlock after Unmarshal, which will do deep copy.
// Otherwise we will trigger SIGSEGV during boltdb re-mmap.
tx.RUnlock()
victims := make(watcherBatch)
wb := newWatcherBatch(wg, evs)