use channels instread of abused :) mutex lock for signaling db write for memstore removeOldest

This commit is contained in:
zelig 2015-05-14 17:42:57 +02:00
parent 8209e09790
commit b8f6d32a45
4 changed files with 11 additions and 6 deletions

View file

@ -259,7 +259,9 @@ func (s *dbStore) Put(chunk *Chunk) {
var index dpaDBIndex var index dpaDBIndex
if s.tryAccessIdx(ikey, &index) { if s.tryAccessIdx(ikey, &index) {
chunk.dbStored.Unlock() if chunk.dbStored != nil {
close(chunk.dbStored)
}
return // already exists, only update access return // already exists, only update access
} }
@ -288,7 +290,9 @@ func (s *dbStore) Put(chunk *Chunk) {
batch.Put(ikey, idata) batch.Put(ikey, idata)
s.db.Write(batch) s.db.Write(batch)
chunk.dbStored.Unlock() if chunk.dbStored != nil {
close(chunk.dbStored)
}
} }
// try to find index; if found, update access cnt and return true // try to find index; if found, update access cnt and return true

View file

@ -60,7 +60,7 @@ type Chunk struct {
C chan bool // to signal data delivery by the dpa C chan bool // to signal data delivery by the dpa
req *requestStatus // req *requestStatus //
wg *sync.WaitGroup wg *sync.WaitGroup
dbStored sync.Mutex dbStored chan bool
source *peer source *peer
} }

View file

@ -9,7 +9,7 @@ type localStore struct {
// localStore is itself a chunk store , to stores a chunk only // localStore is itself a chunk store , to stores a chunk only
// its integrity is checked ? // its integrity is checked ?
func (self *localStore) Put(chunk *Chunk) { func (self *localStore) Put(chunk *Chunk) {
chunk.dbStored.Lock() chunk.dbStored = make(chan bool)
self.memStore.Put(chunk) self.memStore.Put(chunk)
if chunk.wg != nil { if chunk.wg != nil {
chunk.wg.Add(1) chunk.wg.Add(1)

View file

@ -314,8 +314,9 @@ func (s *memStore) removeOldest() {
} }
node.entry.dbStored.Lock() if node.entry.dbStored != nil {
node.entry.dbStored.Unlock() <-node.entry.dbStored
}
if node.entry.SData != nil { if node.entry.SData != nil {
node.entry = nil node.entry = nil