Skip to content

Commit 51d99b3

Browse files
committed
[Bugfix] Use the correct taskData when retrieving descriptors
1 parent c2fd9c7 commit 51d99b3

1 file changed

Lines changed: 10 additions & 6 deletions

File tree

src/NimBLERemoteCharacteristic.cpp

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,13 @@
2626

2727
# include <climits>
2828

29+
// Private structure used to filter descriptors during discovery and return results.
2930
struct NimBLEDescriptorFilter {
30-
NimBLERemoteDescriptor* dsc;
31+
NimBLEDescriptorFilter() = delete;
32+
NimBLEDescriptorFilter(const NimBLEUUID* uuid, NimBLEUtils::TaskData* td = nullptr) : uuid(uuid), taskData(td) {}
3133
const NimBLEUUID* uuid;
32-
void* taskData;
34+
NimBLEUtils::TaskData* taskData;
35+
NimBLERemoteDescriptor* dsc{nullptr};
3336
};
3437

3538
static const char* LOG_TAG = "NimBLERemoteCharacteristic";
@@ -117,9 +120,11 @@ bool NimBLERemoteCharacteristic::retrieveDescriptors(NimBLEDescriptorFilter* pFi
117120
}
118121

119122
NimBLEUtils::TaskData taskData(const_cast<NimBLERemoteCharacteristic*>(this));
120-
NimBLEDescriptorFilter defaultFilter{nullptr, nullptr, &taskData};
123+
NimBLEDescriptorFilter defaultFilter(nullptr, &taskData);
121124
if (pFilter == nullptr) {
122125
pFilter = &defaultFilter;
126+
} else {
127+
pFilter->taskData = &taskData;
123128
}
124129

125130
int rc = ble_gattc_disc_all_dscs(getClient()->getConnHandle(),
@@ -134,7 +139,7 @@ bool NimBLERemoteCharacteristic::retrieveDescriptors(NimBLEDescriptorFilter* pFi
134139

135140
auto prevDscCount = m_vDescriptors.size();
136141
NimBLEUtils::taskWait(taskData, BLE_NPL_TIME_FOREVER);
137-
rc = ((NimBLEUtils::TaskData*)pFilter->taskData)->m_flags;
142+
rc = taskData.m_flags;
138143
if (rc != BLE_HS_EDONE) {
139144
NIMBLE_LOGE(LOG_TAG, "<< retrieveDescriptors(): failed: rc=%d %s", rc, NimBLEUtils::returnCodeToString(rc));
140145
return false;
@@ -156,8 +161,7 @@ bool NimBLERemoteCharacteristic::retrieveDescriptors(NimBLEDescriptorFilter* pFi
156161
NimBLERemoteDescriptor* NimBLERemoteCharacteristic::getDescriptor(const NimBLEUUID& uuid) const {
157162
NIMBLE_LOGD(LOG_TAG, ">> getDescriptor: uuid: %s", uuid.toString().c_str());
158163
NimBLEUUID uuidTmp{uuid};
159-
NimBLEUtils::TaskData taskData(const_cast<NimBLERemoteCharacteristic*>(this));
160-
NimBLEDescriptorFilter filter{nullptr, &uuidTmp, &taskData};
164+
NimBLEDescriptorFilter filter(&uuidTmp);
161165

162166
for (const auto& dsc : m_vDescriptors) {
163167
if (dsc->getUUID() == uuid) {

0 commit comments

Comments
 (0)