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