Skip to content

Commit 74ac317

Browse files
committed
Fix crash when retrieving descriptors.
If more than one descriptor is found the task would be released beofore the process completed causing a race condition.
1 parent e374f50 commit 74ac317

File tree

2 files changed

+6
-8
lines changed

2 files changed

+6
-8
lines changed

src/NimBLERemoteCharacteristic.cpp

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -72,14 +72,8 @@ int NimBLERemoteCharacteristic::descriptorDiscCB(
7272
const auto pChr = (NimBLERemoteCharacteristic*)pTaskData->m_pInstance;
7373
const NimBLEUUID* uuidFilter = filter->uuid;
7474

75-
if (error->status == BLE_HS_ENOTCONN) {
76-
NIMBLE_LOGE(LOG_TAG, "<< Descriptor Discovery; Not connected");
77-
NimBLEUtils::taskRelease(*pTaskData, error->status);
78-
return error->status;
79-
}
80-
8175
if (pChr->getHandle() != chr_val_handle) {
82-
rc = BLE_HS_EDONE; // descriptor not for this characteristic
76+
return 0; // Descriptor not for this characteristic
8377
}
8478

8579
if (rc == 0) {
@@ -92,6 +86,7 @@ int NimBLERemoteCharacteristic::descriptorDiscCB(
9286
}
9387

9488
pChr->m_vDescriptors.push_back(new NimBLERemoteDescriptor(pChr, dsc));
89+
return 0;
9590
}
9691

9792
NimBLEUtils::taskRelease(*pTaskData, rc);

src/NimBLERemoteService.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,10 @@ int NimBLERemoteService::characteristicDiscCB(uint16_t conn_handle,
147147
const ble_gatt_error* error,
148148
const ble_gatt_chr* chr,
149149
void* arg) {
150-
NIMBLE_LOGD(LOG_TAG, "Characteristic Discovery >>");
150+
NIMBLE_LOGD(LOG_TAG,
151+
"Characteristic Discovery >> status: %d handle: %d",
152+
error->status,
153+
(error->status == 0) ? chr->def_handle : -1);
151154
auto pTaskData = (NimBLETaskData*)arg;
152155
const auto pSvc = (NimBLERemoteService*)pTaskData->m_pInstance;
153156

0 commit comments

Comments
 (0)