You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by cc...@apache.org on 2017/04/07 17:15:17 UTC

[2/2] incubator-mynewt-newtmgr git commit: nmxact - Robustness fixes for ble_xport failures.

nmxact - Robustness fixes for ble_xport failures.


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/f573ad10
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newtmgr/tree/f573ad10
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newtmgr/diff/f573ad10

Branch: refs/heads/master
Commit: f573ad10e48bbeada01d3ea0d621f05f5476a91f
Parents: 2509781
Author: Christopher Collins <cc...@apache.org>
Authored: Thu Apr 6 12:37:25 2017 -0700
Committer: Christopher Collins <cc...@apache.org>
Committed: Fri Apr 7 10:12:38 2017 -0700

----------------------------------------------------------------------
 newtmgr/config/ble_config.go |  4 ++--
 nmxact/nmble/ble_fsm.go      |  7 ++++++-
 nmxact/nmble/ble_xport.go    | 40 ++++++++++++++++++++++++---------------
 3 files changed, 33 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newtmgr/blob/f573ad10/newtmgr/config/ble_config.go
----------------------------------------------------------------------
diff --git a/newtmgr/config/ble_config.go b/newtmgr/config/ble_config.go
index d8fd643..5cb93df 100644
--- a/newtmgr/config/ble_config.go
+++ b/newtmgr/config/ble_config.go
@@ -24,10 +24,10 @@ import (
 	"strings"
 	"time"
 
+	"mynewt.apache.org/newt/util"
 	"mynewt.apache.org/newtmgr/nmxact/bledefs"
 	"mynewt.apache.org/newtmgr/nmxact/nmble"
 	"mynewt.apache.org/newtmgr/nmxact/sesn"
-	"mynewt.apache.org/newt/util"
 )
 
 type BleConfig struct {
@@ -125,7 +125,7 @@ func BuildBleXport(bc *BleConfig) (*nmble.BleXport, error) {
 	params.BlehostdPath = bc.BlehostdPath
 	params.DevPath = bc.ControllerPath
 	params.BlehostdAcceptTimeout = 2 * time.Second
-	params.BlehostdRestart = false
+	params.Restart = false
 
 	bx, err := nmble.NewBleXport(params)
 	if err != nil {

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newtmgr/blob/f573ad10/nmxact/nmble/ble_fsm.go
----------------------------------------------------------------------
diff --git a/nmxact/nmble/ble_fsm.go b/nmxact/nmble/ble_fsm.go
index 10c2bee..7bf429e 100644
--- a/nmxact/nmble/ble_fsm.go
+++ b/nmxact/nmble/ble_fsm.go
@@ -641,7 +641,7 @@ func (bf *BleFsm) tryFillPeerDev() bool {
 //         error                The error that caused the start attempt to
 //                                  fail; nil on success.
 func (bf *BleFsm) Start() (bool, error) {
-	if bf.getState() != SESN_STATE_UNCONNECTED {
+	if !bf.IsClosed() {
 		return false, nmxutil.NewSesnAlreadyOpenError(
 			"Attempt to open an already-open BLE session")
 	}
@@ -678,6 +678,7 @@ func (bf *BleFsm) Start() (bool, error) {
 			}
 
 			if err != nil {
+				bf.setState(SESN_STATE_UNCONNECTED)
 				return false, err
 			}
 
@@ -691,6 +692,7 @@ func (bf *BleFsm) Start() (bool, error) {
 			if err != nil {
 				bhe := nmxutil.ToBleHost(err)
 				retry := bhe != nil && bhe.Status == ERR_CODE_ENOTCONN
+				bf.setState(SESN_STATE_UNCONNECTED)
 				return retry, err
 			}
 
@@ -702,6 +704,7 @@ func (bf *BleFsm) Start() (bool, error) {
 				SESN_STATE_DISCOVERED_SVC,
 				cb)
 			if err != nil {
+				bf.setState(SESN_STATE_UNCONNECTED)
 				return false, err
 			}
 
@@ -716,10 +719,12 @@ func (bf *BleFsm) Start() (bool, error) {
 				SESN_STATE_DISCOVERED_CHR,
 				cb)
 			if err != nil {
+				bf.setState(SESN_STATE_UNCONNECTED)
 				return false, err
 			}
 
 			if err := bf.subscribe(); err != nil {
+				bf.setState(SESN_STATE_UNCONNECTED)
 				return false, err
 			}
 

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newtmgr/blob/f573ad10/nmxact/nmble/ble_xport.go
----------------------------------------------------------------------
diff --git a/nmxact/nmble/ble_xport.go b/nmxact/nmble/ble_xport.go
index 970bb00..93fece1 100644
--- a/nmxact/nmble/ble_xport.go
+++ b/nmxact/nmble/ble_xport.go
@@ -42,9 +42,10 @@ type XportCfg struct {
 	// Default: 1 second.
 	BlehostdRspTimeout time.Duration
 
-	// Whether to restart the blehostd process if it terminates.
+	// Whether to restart the transport if it goes down or fails to start in
+	// the first place.
 	// Default: true.
-	BlehostdRestart bool
+	Restart bool
 
 	// How long to allow for the host and controller to sync at startup.
 	// Default: 10 seconds.
@@ -64,9 +65,9 @@ func NewXportCfg() XportCfg {
 	return XportCfg{
 		BlehostdAcceptTimeout: time.Second,
 		BlehostdRspTimeout:    time.Second,
-		BlehostdRestart:       true,
+		Restart:               true,
 		SyncTimeout:           10 * time.Second,
-		PreferredMtu:          512,
+		PreferredMtu:          264,
 	}
 }
 
@@ -212,18 +213,28 @@ func (bx *BleXport) initialSyncCheck() (bool, *BleListener, error) {
 }
 
 func (bx *BleXport) shutdown(restart bool, err error) {
-	var fullyStarted bool
+	bx.mtx.Lock()
 
-	if bx.setStateFrom(BLE_XPORT_STATE_STARTED,
-		BLE_XPORT_STATE_STOPPING) {
+	var fullyStarted bool
+	var already bool
 
+	switch bx.state {
+	case BLE_XPORT_STATE_STARTED:
+		already = false
 		fullyStarted = true
-	} else if bx.setStateFrom(BLE_XPORT_STATE_STARTING,
-		BLE_XPORT_STATE_STOPPING) {
-
+		bx.state = BLE_XPORT_STATE_STOPPING
+	case BLE_XPORT_STATE_STARTING:
+		already = false
 		fullyStarted = false
-	} else {
-		// Stop already in progress.
+		bx.state = BLE_XPORT_STATE_STOPPING
+	default:
+		already = true
+	}
+
+	bx.mtx.Unlock()
+
+	if already {
+		// Shutdown already in progress.
 		return
 	}
 
@@ -291,7 +302,7 @@ func (bx *BleXport) setStateFrom(from BleXportState, to BleXportState) bool {
 	switch bx.state {
 	case BLE_XPORT_STATE_STARTED:
 		bx.notifyReadyListeners(nil)
-	case BLE_XPORT_STATE_STOPPED:
+	case BLE_XPORT_STATE_STOPPED, BLE_XPORT_STATE_DORMANT:
 		bx.notifyReadyListeners(fmt.Errorf("BLE transport stopped"))
 	default:
 	}
@@ -319,7 +330,6 @@ func (bx *BleXport) startOnce() error {
 				"blehostd did not connect to socket; " +
 					"controller not attached?")
 		} else {
-			panic(err.Error())
 			err = nmxutil.NewXportError(
 				"Failed to start child process: " + err.Error())
 		}
@@ -462,7 +472,7 @@ func (bx *BleXport) Start() error {
 			// If restarts are disabled, or if the shutdown was a result of an
 			// explicit stop call (instead of an unexpected error), stop
 			// restarting the transport.
-			if !bx.cfg.BlehostdRestart || !restart {
+			if !bx.cfg.Restart || !restart {
 				bx.setStateFrom(BLE_XPORT_STATE_STOPPED,
 					BLE_XPORT_STATE_DORMANT)
 				break