Skip to content
Snippets Groups Projects
Commit 2b855c42 authored by Ophestra's avatar Ophestra
Browse files

safe concurrent access and (transparent) creation of page DBs

parent d4954821
No related branches found
Tags v1.4.3
No related merge requests found
......@@ -12,10 +12,18 @@ const PageSize = 64
// pageDB returns leveldb of page variant and creates it as required.
func (s *Store) pageDB(variant string) *leveldb.DB {
l := s.getLock("pageDB_get")
l.RLock()
defer l.RUnlock()
if s.pageldb[variant] != nil {
return s.pageldb[variant]
} else {
l.RUnlock()
l.Lock()
if db, err := leveldb.OpenFile(s.PageVariantPath(variant), nil); err != nil {
l.Unlock()
l.RLock()
s.fatalClose(fmt.Sprintf("Error opening leveldb for page variant %s, %s", variant, err))
} else {
s.pageldb[variant] = db
......@@ -23,6 +31,8 @@ func (s *Store) pageDB(variant string) *leveldb.DB {
log.Infof("Page variant %s created.", variant)
s.pageSetTotalCountNoDestroy(variant, 0)
}
l.Unlock()
l.RLock()
return db
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment