Skip to content

Commit 2d9dbed

Browse files
authored
Merge pull request ethereum#695 from ethersphere/fix-panic-closed-channel
swarm/storage: close channel only after we have replaced chunk in memStore
2 parents 9d46f81 + 2e102cb commit 2d9dbed

File tree

1 file changed

+7
-15
lines changed

1 file changed

+7
-15
lines changed

swarm/storage/localstore.go

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,8 @@ func (self *LocalStore) Put(chunk *Chunk) {
109109
return
110110
}
111111

112-
log.Trace("localstore.put", "key", chunk.Addr)
112+
log.Trace("localstore.put", "addr", chunk.Addr)
113+
113114
self.mu.Lock()
114115
defer self.mu.Unlock()
115116

@@ -128,28 +129,19 @@ func (self *LocalStore) Put(chunk *Chunk) {
128129
return
129130
}
130131

131-
self.memStore.Put(chunk)
132-
133-
if memChunk != nil && memChunk.ReqC != nil {
134-
close(memChunk.ReqC)
135-
}
136-
137132
self.DbStore.Put(chunk)
138133

134+
// chunk is no longer a request, but a chunk with data, so replace it in memStore
139135
newc := NewChunk(chunk.Addr, nil)
140136
newc.SData = chunk.SData
141137
newc.Size = chunk.Size
142-
//newc.dbStored = chunk.dbStored
143138
newc.dbStoredC = chunk.dbStoredC
144-
//newc.dbStoredMu = chunk.dbStoredMu
145-
go func() {
146-
<-chunk.dbStoredC
147139

148-
self.mu.Lock()
149-
defer self.mu.Unlock()
140+
self.memStore.Put(newc)
150141

151-
self.memStore.Put(newc)
152-
}()
142+
if memChunk != nil && memChunk.ReqC != nil {
143+
close(memChunk.ReqC)
144+
}
153145
}
154146

155147
// Get(chunk *Chunk) looks up a chunk in the local stores

0 commit comments

Comments
 (0)