swarm/storage: prevent data race on LDBStore.batchesC

https://github.com/ethersphere/go-ethereum/issues/1198#issuecomment-461775049
This commit is contained in:
Janos Guljas 2019-02-08 12:35:37 +01:00
parent d233560768
commit edfee9cacb

View file

@ -805,12 +805,12 @@ func (s *LDBStore) Put(ctx context.Context, chunk Chunk) error {
gcIdxKey := getGCIdxKey(&index) gcIdxKey := getGCIdxKey(&index)
gcIdxData := getGCIdxValue(&index, po, chunk.Address()) gcIdxData := getGCIdxValue(&index, po, chunk.Address())
s.batch.Put(gcIdxKey, gcIdxData) s.batch.Put(gcIdxKey, gcIdxData)
s.lock.Unlock()
select { select {
case s.batchesC <- struct{}{}: case s.batchesC <- struct{}{}:
default: default:
} }
s.lock.Unlock()
select { select {
case <-batch.c: case <-batch.c:
@ -1049,7 +1049,9 @@ func (s *LDBStore) Close() {
s.lock.Unlock() s.lock.Unlock()
// force writing out current batch // force writing out current batch
s.writeCurrentBatch() s.writeCurrentBatch()
s.lock.Lock()
close(s.batchesC) close(s.batchesC)
s.lock.Unlock()
s.db.Close() s.db.Close()
} }