Skip to content

Commit 1a4e0d6

Browse files
committed
mqtt: sync disconnnection fix
1 parent 802cc96 commit 1a4e0d6

1 file changed

Lines changed: 16 additions & 16 deletions

File tree

mqtt_streaming_protocol/src/MqttAsyncClient.cpp

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -107,25 +107,25 @@ bool MqttAsyncClient::syncDisconnect(int timeoutMs)
107107

108108
if (isConnected() != MqttConnectionStatus::not_connected)
109109
{
110-
if (disconnect().success)
110+
std::atomic<bool> done{false};
111+
std::promise<bool> disconnectedPromise;
112+
auto disconnectedFuture = disconnectedPromise.get_future();
111113
{
112-
std::atomic<bool> done{false};
113-
std::promise<bool> disconnectedPromise;
114-
auto disconnectedFuture = disconnectedPromise.get_future();
114+
auto lock = getCbLock();
115+
onInternalDisconnectCb = [promise = &disconnectedPromise, &done](bool result)
115116
{
116-
auto lock = getCbLock();
117-
onInternalDisconnectCb = [promise = &disconnectedPromise, &done](bool result)
118-
{
119-
bool expected = false;
120-
if (done.compare_exchange_strong(expected, true))
121-
promise->set_value(result);
122-
};
123-
}
117+
bool expected = false;
118+
if (done.compare_exchange_strong(expected, true))
119+
promise->set_value(result);
120+
};
121+
}
122+
if (disconnect().success)
123+
{
124124
auto status = disconnectedFuture.wait_for(std::chrono::milliseconds(timeoutMs));
125-
{
126-
auto lock = getCbLock();
127-
onInternalDisconnectCb = nullptr;
128-
}
125+
}
126+
{
127+
auto lock = getCbLock();
128+
onInternalDisconnectCb = nullptr;
129129
}
130130
}
131131
if (isConnected() == MqttConnectionStatus::not_connected)

0 commit comments

Comments
 (0)