@@ -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