Skip to content

Commit

Permalink
Future proof threading / scheduled task flows
Browse files Browse the repository at this point in the history
This adds a guard to ensure that we only attempt a further scan when we
the scan cycler is started. This helps ensure we've terminated scanning
for the case where all regions have been removed but the service is
still bound. In this case only `stop` will be called (instead of both
`stop` and `destroy`). When this happens there are two potential
scheduled tasks still queued:

- `scanLeDevice(true)` from `deferScanIfNeeded`
- `scheduleScanCycleStop`

Which potential task is queued is based on if we were in an active scan
period or a between scan period when `stop` was called. In the case of a
between scan period the `deferScanIfNeeded` _will_ cause scanning to
start up again when it ends. It will run for one more scan cycle before
it terminates in `finishScanCycle`. Similarly, if we are in an active
scan period the scheduled job for finishing the scan cycle will continue
for the duration of the scan period.
  • Loading branch information
cupakromer committed May 24, 2017
1 parent 9d83df6 commit 997c86c
Show file tree
Hide file tree
Showing 2 changed files with 4 additions and 2 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ Bug Fixes:

- Fix failure to stop scanning when unbinding from service or when the between scan period
is nonzero. (#507, David G. Young)
- Fix failure to stop scanning when there are no active ranged or monitored
regions. (#513, Aaron Kromer)

### 2.10 / 2017-04-21

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -230,7 +230,7 @@ protected void scanLeDevice(final Boolean enable) {
if (getBluetoothAdapter() == null) {
LogManager.e(TAG, "No Bluetooth adapter. beaconService cannot scan.");
}
if (enable) {
if (enable && mScanningEnabled) {
if (deferScanIfNeeded()) {
return;
}
Expand Down Expand Up @@ -294,7 +294,7 @@ protected void scanLeDevice(final Boolean enable) {
protected void scheduleScanCycleStop() {
// Stops scanning after a pre-defined scan period.
long millisecondsUntilStop = mScanCycleStopTime - SystemClock.elapsedRealtime();
if (millisecondsUntilStop > 0) {
if (mScanningEnabled && millisecondsUntilStop > 0) {
LogManager.d(TAG, "Waiting to stop scan cycle for another %s milliseconds",
millisecondsUntilStop);
if (mBackgroundFlag) {
Expand Down

0 comments on commit 997c86c

Please sign in to comment.