diff --git a/posting/list.go b/posting/list.go index e1b80656132bec573efb5bbaf164b82b03d54f4e..3fe43415bb922919e2d236dfe3838f360bd19bac 100644 --- a/posting/list.go +++ b/posting/list.go @@ -17,6 +17,8 @@ package posting import ( + "sync" + "github.com/google/flatbuffers/go" "github.com/manishrjain/dgraph/posting/types" "github.com/manishrjain/dgraph/x" @@ -30,6 +32,7 @@ const Set = 0x01 const Del = 0x02 type List struct { + mutex sync.RWMutex buffer []byte mutations []byte } @@ -59,6 +62,9 @@ func addPosting(b *flatbuffers.Builder, p types.Posting) flatbuffers.UOffsetT { var empty []byte func (l *List) Init() { + l.mutex.Lock() + defer l.mutex.Unlock() + if len(empty) == 0 { b := flatbuffers.NewBuilder(0) types.PostingListStart(b) @@ -73,10 +79,16 @@ func (l *List) Init() { } func (l *List) Root() *types.PostingList { + l.mutex.RLock() + defer l.mutex.RUnlock() + return types.GetRootAsPostingList(l.buffer, 0) } func (l *List) AddMutation(t x.Triple, op byte) { + l.mutex.Lock() + defer l.mutex.Unlock() + b := flatbuffers.NewBuilder(0) muts := types.GetRootAsPostingList(l.mutations, 0) var offsets []flatbuffers.UOffsetT @@ -135,7 +147,7 @@ func remove(ll *linked.List, p *types.Posting) { } } -func (l *List) GenerateLinkedList() *linked.List { +func (l *List) generateLinkedList() *linked.List { plist := types.GetRootAsPostingList(l.buffer, 0) ll := linked.New() @@ -169,7 +181,10 @@ func (l *List) GenerateLinkedList() *linked.List { } func (l *List) Commit() { - ll := l.GenerateLinkedList() + l.mutex.Lock() + defer l.mutex.Unlock() + + ll := l.generateLinkedList() b := flatbuffers.NewBuilder(0) var offsets []flatbuffers.UOffsetT