From e0e0ed08ae1a559de3bff395c59b31320b7f213d Mon Sep 17 00:00:00 2001 From: mcrakhman Date: Thu, 20 Oct 2022 21:48:31 +0200 Subject: [PATCH] Fix bug with nested read locks in diff --- common/pkg/acl/tree/objecttree.go | 2 ++ common/pkg/ldiff/diff.go | 7 ++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/common/pkg/acl/tree/objecttree.go b/common/pkg/acl/tree/objecttree.go index b7a15e0a..a89b3a29 100644 --- a/common/pkg/acl/tree/objecttree.go +++ b/common/pkg/acl/tree/objecttree.go @@ -177,6 +177,8 @@ func (ot *objectTree) AddContent(ctx context.Context, content SignableChangeCont Added: []*treechangeproto.RawTreeChangeWithId{rawChange}, Mode: Append, } + log.With("treeId", ot.id).With("head", objChange.Id). + Debug("finished adding content") return } diff --git a/common/pkg/ldiff/diff.go b/common/pkg/ldiff/diff.go index 840de719..9ff906ff 100644 --- a/common/pkg/ldiff/diff.go +++ b/common/pkg/ldiff/diff.go @@ -217,6 +217,11 @@ func (d *diff) getRange(r Range) (rr RangeResult) { func (d *diff) Ranges(ctx context.Context, ranges []Range, resBuf []RangeResult) (results []RangeResult, err error) { d.mu.RLock() defer d.mu.RUnlock() + + return d.ranges(ranges, resBuf) +} + +func (d *diff) ranges(ranges []Range, resBuf []RangeResult) (results []RangeResult, err error) { results = resBuf[:0] for _, r := range ranges { results = append(results, d.getRange(r)) @@ -251,7 +256,7 @@ func (d *diff) Diff(ctx context.Context, dl Remote) (newIds, changedIds, removed return default: } - if dctx.myRes, err = d.Ranges(ctx, dctx.toSend, dctx.myRes); err != nil { + if dctx.myRes, err = d.ranges(dctx.toSend, dctx.myRes); err != nil { return } if dctx.otherRes, err = dl.Ranges(ctx, dctx.toSend, dctx.otherRes); err != nil {