summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJackLivio <jack@livio.io>2021-04-06 09:12:57 -0400
committerJackLivio <jack@livio.io>2021-04-06 09:12:57 -0400
commit05a44ff3b23645370730163441a4378d0afd24c2 (patch)
treeff7a660bc5bf4c99ed90eb097c7a5d64202ddaac
parentbbf8256fa306c06d6e5c669134235e06da43fa56 (diff)
downloadsdl_core-fix/bt_scan_blocking_updateapplist.tar.gz
Prevent deadlock on shutdownfix/bt_scan_blocking_updateapplist
-rw-r--r--src/components/transport_manager/src/bluetooth/bluetooth_device_scanner.cc6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/components/transport_manager/src/bluetooth/bluetooth_device_scanner.cc b/src/components/transport_manager/src/bluetooth/bluetooth_device_scanner.cc
index acd7c78dde..8342ebdcc6 100644
--- a/src/components/transport_manager/src/bluetooth/bluetooth_device_scanner.cc
+++ b/src/components/transport_manager/src/bluetooth/bluetooth_device_scanner.cc
@@ -433,10 +433,14 @@ void BluetoothDeviceScanner::TimedWaitForDeviceScanRequest() {
{
sync_primitives::AutoLock auto_lock(device_scan_requested_lock_);
while (!(device_scan_requested_ || shutdown_requested_)) {
- sync_primitives::AutoLock auto_lock(cv_exit_lock_);
+ if(!cv_exit_lock_.Try()) {
+ //Lock is taken by terminate thread, return
+ return;
+ }
const sync_primitives::ConditionalVariable::WaitStatus wait_status =
device_scan_requested_cv_.WaitFor(auto_lock,
auto_repeat_pause_sec_ * 1000);
+ cv_exit_lock_.Release();
if (wait_status == sync_primitives::ConditionalVariable::kTimeout) {
SDL_LOG_INFO("Bluetooth scanner timeout, performing scan");
device_scan_requested_ = true;