From b0563ad0d77449cad38f2ba8f9d535f7299e0e6c Mon Sep 17 00:00:00 2001 From: Anna Shaleva Date: Thu, 4 Feb 2021 12:42:48 +0300 Subject: [PATCH] services: fix Oracle responces mutex MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Solves the following problem: === RUN TestOracleFull logger.go:130: 2021-02-04T09:25:16.305Z INFO P2PNotaryRequestPayloadPool size is not set or wrong, setting default value {"P2PNotaryRequestPayloadPoolSize": 1000} logger.go:130: 2021-02-04T09:25:16.306Z INFO no storage version found! creating genesis block logger.go:130: 2021-02-04T09:25:27.687Z DEBUG done processing headers {"headerIndex": 1, "blockHeight": 0, "took": "2.413398ms"} logger.go:130: 2021-02-04T09:25:27.696Z DEBUG done processing headers {"headerIndex": 2, "blockHeight": 1, "took": "1.138196ms"} logger.go:130: 2021-02-04T09:25:28.680Z INFO blockchain persist completed {"persistedBlocks": 2, "persistedKeys": 173, "headerHeight": 2, "blockHeight": 2, "took": "166.793µs"} fatal error: sync: Unlock of unlocked RWMutex goroutine 6157 [running]: runtime.throw(0x115dfdb, 0x20) /usr/local/go/src/runtime/panic.go:1116 +0x72 fp=0xc000297ca0 sp=0xc000297c70 pc=0x44f432 sync.throw(0x115dfdb, 0x20) /usr/local/go/src/runtime/panic.go:1102 +0x35 fp=0xc000297cc0 sp=0xc000297ca0 pc=0x44f3b5 sync.(*RWMutex).Unlock(0xc000135300) /usr/local/go/src/sync/rwmutex.go:129 +0xf3 fp=0xc000297d00 sp=0xc000297cc0 pc=0x4a1ac3 github.com/nspcc-dev/neo-go/pkg/services/oracle.(*Oracle).Run(0xc000135180) /go/src/github.com/nspcc-dev/neo-go/pkg/services/oracle/oracle.go:189 +0x82b fp=0xc000297fd8 sp=0xc000297d00 pc=0xe13b0b runtime.goexit() /usr/local/go/src/runtime/asm_amd64.s:1373 +0x1 fp=0xc000297fe0 sp=0xc000297fd8 pc=0x4834d1 created by github.com/nspcc-dev/neo-go/pkg/core.TestOracleFull /go/src/github.com/nspcc-dev/neo-go/pkg/core/oracle_test.go:276 +0x3f1 --- pkg/services/oracle/oracle.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/services/oracle/oracle.go b/pkg/services/oracle/oracle.go index 3df90edc3..58e9d4b89 100644 --- a/pkg/services/oracle/oracle.go +++ b/pkg/services/oracle/oracle.go @@ -171,7 +171,7 @@ func (o *Oracle) Run() { return case <-tick.C: var reprocess []uint64 - o.respMtx.RLock() + o.respMtx.Lock() o.removed = make(map[uint64]bool) for id, incTx := range o.responses { incTx.RLock()