diff --git a/store/page.go b/store/page.go index 937b1952570070671618e8c9c894d93557fd9861..8a1a623041275f5c1a81b846b006c90526c72511 100644 --- a/store/page.go +++ b/store/page.go @@ -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 } }