Procházet zdrojové kódy

storage: release tx lock until finish using the readonly bytes

The backend will return read only bytes that are only vaild while
the tx is open. We should hold the lock until we get a full copy
by unmarshal.
Xiang Li před 10 roky
rodič
revize
ae5161382b
1 změnil soubory, kde provedl 1 přidání a 1 odebrání
  1. 1 1
      storage/watchable_store.go

+ 1 - 1
storage/watchable_store.go

@@ -324,7 +324,6 @@ func (s *watchableStore) syncWatchers() {
 	tx := s.store.b.BatchTx()
 	tx.Lock()
 	ks, vs := tx.UnsafeRange(keyBucketName, minBytes, maxBytes, 0)
-	tx.Unlock()
 
 	evs := []storagepb.Event{}
 
@@ -351,6 +350,7 @@ func (s *watchableStore) syncWatchers() {
 
 		evs = append(evs, ev)
 	}
+	tx.Unlock()
 
 	for w, es := range newWatcherToEventMap(s.unsynced, evs) {
 		select {