nmxact - Fix hang on some ble_xport restarts.

Project: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newtmgr/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newtmgr/commit/2d55058f
Tree: 
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newtmgr/tree/2d55058f
Diff: 
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newtmgr/diff/2d55058f

Branch: refs/heads/master
Commit: 2d55058fe3ee691e69289c4d0eb8d4160feae800
Parents: 7dfbeb0
Author: Christopher Collins <[email protected]>
Authored: Tue Apr 4 18:05:59 2017 -0700
Committer: Christopher Collins <[email protected]>
Committed: Tue Apr 4 18:10:25 2017 -0700

----------------------------------------------------------------------
 nmxact/nmble/ble_xport.go | 2 +-
 nmxact/nmble/dispatch.go  | 8 ++++----
 2 files changed, 5 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newtmgr/blob/2d55058f/nmxact/nmble/ble_xport.go
----------------------------------------------------------------------
diff --git a/nmxact/nmble/ble_xport.go b/nmxact/nmble/ble_xport.go
index 8a8b909..f957341 100644
--- a/nmxact/nmble/ble_xport.go
+++ b/nmxact/nmble/ble_xport.go
@@ -76,6 +76,7 @@ func NewBleXport(cfg XportCfg) (*BleXport, error) {
        bx := &BleXport{
                Bd:           NewBleDispatcher(),
                shutdownChan: make(chan bool),
+               readyChan:    make(chan error),
                cfg:          cfg,
        }
 
@@ -286,7 +287,6 @@ func (bx *BleXport) startOnce() error {
 
        bx.stopChan = make(chan struct{})
        bx.numStopListeners = 0
-       bx.Bd.Clear()
 
        bx.createUnixChild()
        if err := bx.client.Start(); err != nil {

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newtmgr/blob/2d55058f/nmxact/nmble/dispatch.go
----------------------------------------------------------------------
diff --git a/nmxact/nmble/dispatch.go b/nmxact/nmble/dispatch.go
index aba7504..583f3a4 100644
--- a/nmxact/nmble/dispatch.go
+++ b/nmxact/nmble/dispatch.go
@@ -292,6 +292,8 @@ func (bd *BleDispatcher) ErrorAll(err error) {
                listeners = append(listeners, v)
        }
 
+       bd.clear()
+
        bd.mutex.Unlock()
 
        for _, listener := range listeners {
@@ -299,10 +301,8 @@ func (bd *BleDispatcher) ErrorAll(err error) {
        }
 }
 
-func (bd *BleDispatcher) Clear() {
-       bd.mutex.Lock()
-       defer bd.mutex.Unlock()
-
+// The caller must lock the mutex.
+func (bd *BleDispatcher) clear() {
        for s, _ := range bd.seqMap {
                delete(bd.seqMap, s)
        }

Reply via email to