From efa530b393e67889229e2b08d396ec6af21c1d67 Mon Sep 17 00:00:00 2001 From: Andy Arthur Date: Tue, 28 Feb 2023 17:36:33 -0800 Subject: [PATCH 1/2] go/store/nbs: fix re-entrant deadlock in journal_writer --- go/store/nbs/journal_writer.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go/store/nbs/journal_writer.go b/go/store/nbs/journal_writer.go index 21a321fe53..78f1f32773 100644 --- a/go/store/nbs/journal_writer.go +++ b/go/store/nbs/journal_writer.go @@ -255,8 +255,8 @@ func (wr *journalWriter) hasAddr(h addr) (ok bool) { // getCompressedChunk reads the CompressedChunks with addr |h|. func (wr *journalWriter) getCompressedChunk(h addr) (CompressedChunk, error) { wr.lock.RLock() - defer wr.lock.RUnlock() r, ok := wr.ranges.get(h) + wr.lock.RUnlock() if !ok { return CompressedChunk{}, nil } From 32904dbb58f0ca843e0681cdb5f8fb0d3d223432 Mon Sep 17 00:00:00 2001 From: Andy Arthur Date: Thu, 2 Mar 2023 11:24:03 -0800 Subject: [PATCH 2/2] go/store/nbs: pr feedback --- go/store/nbs/journal_writer.go | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/go/store/nbs/journal_writer.go b/go/store/nbs/journal_writer.go index 78f1f32773..27a15c8a23 100644 --- a/go/store/nbs/journal_writer.go +++ b/go/store/nbs/journal_writer.go @@ -255,8 +255,8 @@ func (wr *journalWriter) hasAddr(h addr) (ok bool) { // getCompressedChunk reads the CompressedChunks with addr |h|. func (wr *journalWriter) getCompressedChunk(h addr) (CompressedChunk, error) { wr.lock.RLock() + defer wr.lock.RUnlock() r, ok := wr.ranges.get(h) - wr.lock.RUnlock() if !ok { return CompressedChunk{}, nil } @@ -335,8 +335,6 @@ func (wr *journalWriter) flushIndexRecord(root hash.Hash, end int64) (err error) // readAt reads len(p) bytes from the journal at offset |off|. func (wr *journalWriter) readAt(p []byte, off int64) (n int, err error) { - wr.lock.RLock() - defer wr.lock.RUnlock() var bp []byte if off < wr.off { // fill some or all of |p| from |wr.file|