From 832f0acdf908a18b266099c4bf5d77663e203628 Mon Sep 17 00:00:00 2001
From: bojie <a1346494@gmail.com>
Date: Mon, 12 Nov 2018 09:15:21 +0800
Subject: app: bug fix (#7)

Add notify mutex to prevent missing chain issue while concurrent
appending with same slice.
---
 dex/app.go | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/dex/app.go b/dex/app.go
index 7d2165118..d0d911e86 100644
--- a/dex/app.go
+++ b/dex/app.go
@@ -51,6 +51,7 @@ type DexconApp struct {
 	chainLocksInitMu sync.Mutex
 	chainLocks       map[uint32]*sync.RWMutex
 
+	notifyMu        sync.Mutex
 	notifyChan      sync.Map
 	chainLatestRoot sync.Map
 }
@@ -79,6 +80,9 @@ func NewDexconApp(txPool *core.TxPool, blockchain *core.BlockChain, gov *DexconG
 }
 
 func (d *DexconApp) addNotify(height uint64) <-chan uint64 {
+	d.notifyMu.Lock()
+	defer d.notifyMu.Unlock()
+
 	result := make(chan uint64)
 	v, ok := d.notifyChan.Load(height)
 	if ok {
@@ -92,6 +96,9 @@ func (d *DexconApp) addNotify(height uint64) <-chan uint64 {
 }
 
 func (d *DexconApp) notify(height uint64) {
+	d.notifyMu.Lock()
+	defer d.notifyMu.Unlock()
+
 	d.notifyChan.Range(func(key, value interface{}) bool {
 		h := key.(uint64)
 		n := value.(*notify)
-- 
cgit v1.2.3