Fix lock handling in cache flusher for API

Unlocking the different elements in cache flusher was deferred to the
end of the function. Unfortunately, being a for loop wrapped in a
goroutine, deferred were never executed.
This commit is contained in:
Vincent Bernat
2015-10-02 19:59:47 +02:00
parent a294a91685
commit 16101b56fe
+17 -15
View File
@@ -32,25 +32,27 @@ func cacheFlusher() {
for { for {
<-ticker <-ticker
// lock everything to eliminate in-progress calls func() {
r := context.CollectionFactory().RemoteRepoCollection() // lock everything to eliminate in-progress calls
r.Lock() r := context.CollectionFactory().RemoteRepoCollection()
defer r.Unlock() r.Lock()
defer r.Unlock()
l := context.CollectionFactory().LocalRepoCollection() l := context.CollectionFactory().LocalRepoCollection()
l.Lock() l.Lock()
defer l.Unlock() defer l.Unlock()
s := context.CollectionFactory().SnapshotCollection() s := context.CollectionFactory().SnapshotCollection()
s.Lock() s.Lock()
defer s.Unlock() defer s.Unlock()
p := context.CollectionFactory().PublishedRepoCollection() p := context.CollectionFactory().PublishedRepoCollection()
p.Lock() p.Lock()
defer p.Unlock() defer p.Unlock()
// all collections locked, flush them // all collections locked, flush them
context.CollectionFactory().Flush() context.CollectionFactory().Flush()
}()
} }
} }