openidec

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

commit 862cf71b9b5fa06788ee5f966862052fc2b68d3f
parent 039fd4f61c9733300ea2726dc0397c5f1cdcbc4c
Author: Peter Kosyh <p.kosyh@gmail.com>
Date:   Sun,  6 Sep 2020 15:27:37 +0300

Merge branch 'master' of https://github.com/gl00my/ii-go

Diffstat:
Mii/db.go | 22++++++++++++++++------
1 file changed, 16 insertions(+), 6 deletions(-)

diff --git a/ii/db.go b/ii/db.go @@ -34,6 +34,7 @@ type DB struct { Path string Idx Index Sync sync.RWMutex + IdxSync sync.RWMutex Name string } @@ -163,6 +164,8 @@ func (db *DB) _ReopenIndex() (*os.File, error) { return file, nil } func (db *DB) LoadIndex() error { + db.IdxSync.Lock() + defer db.IdxSync.Unlock() var Idx Index file, err := os.Open(db.IndexPath()) if err != nil { @@ -252,6 +255,8 @@ func (db *DB) _Lookup(Id string, bl bool, idx bool) *MsgInfo { return nil } } + db.IdxSync.RLock() + defer db.IdxSync.RUnlock() info, ok := db.Idx.Hash[Id] if !ok || (!bl && info.Off < 0) { return nil @@ -414,6 +419,9 @@ func (db *DB) Echoes(names []string) []*Echo { return list } + db.IdxSync.RLock() + defer db.IdxSync.RUnlock() + hash := make(map[string]Echo) size := len(db.Idx.List) for i := 0; i < size; i++ { @@ -481,6 +489,10 @@ func (db *DB) SelectIDS(r Query) []string { if size == 0 { return Resp } + + db.IdxSync.RLock() + defer db.IdxSync.RUnlock() + if r.Start < 0 { start := 0 for i := size - 1; i >= 0; i-- { @@ -548,6 +560,10 @@ func (db *DB) _Store(m *Msg, edit bool) error { if err := db.LoadIndex(); err != nil { return err } + + db.IdxSync.RLock() + defer db.IdxSync.RUnlock() + if _, ok := db.Idx.Hash[m.MsgId]; ok && !edit { // exist and not edit return errors.New("Already exists") } @@ -570,12 +586,6 @@ func (db *DB) _Store(m *Msg, edit bool) error { if err := append_file(db.IndexPath(), rec); err != nil { return err } - // if _, ok := db.Idx.Hash[m.MsgId]; !ok { // new msg - // db.Idx.List = append(db.Idx.List, m.MsgId) - // } - // mi := MsgInfo{Id: m.MsgId, Echo: m.Echo, Off: off, Repto: repto} - // db.Idx.Hash[m.MsgId] = mi - // db.Idx.FileSize += (int64(len(rec) + 1)) return nil }