@@ -151,9 +151,10 @@ WebsocketManager::~WebsocketManager() {
151151 running_.store (false , std::memory_order_release);
152152 if (ping_thread_.joinable ())
153153 ping_thread_.join ();
154- if (ws_)
154+ if (ws_) {
155155 ws_->reset_callbacks ();
156156 ws_->close ();
157+ }
157158}
158159
159160// Connection callbacks
@@ -178,7 +179,7 @@ void WebsocketManager::on_message(const char* data, std::size_t len) {
178179 if (!identifier || *identifier == " pong" )
179180 return ;
180181
181- const auto handlers = handlers_. load ( std::memory_order_acquire);
182+ const auto handlers = std::atomic_load_explicit (&handlers_, std::memory_order_acquire);
182183 const auto it = handlers->find (*identifier);
183184 if (it == handlers->end ())
184185 return ;
@@ -240,7 +241,7 @@ int WebsocketManager::subscribe(
240241 const std::string identifier = to_identifier (subscription);
241242 const auto handler = std::make_shared<Handler>(id, std::move (callback));
242243
243- auto old = handlers_. load ( std::memory_order_acquire);
244+ auto old = std::atomic_load_explicit (&handlers_, std::memory_order_acquire);
244245 std::shared_ptr<HandlerMap> new_map;
245246 do {
246247 if (is_single_subscriber_channel (identifier)) {
@@ -251,8 +252,9 @@ int WebsocketManager::subscribe(
251252
252253 new_map = std::make_shared<HandlerMap>(*old);
253254 (*new_map)[identifier].push_back (handler);
254- } while (!handlers_.compare_exchange_weak (
255- old, new_map,
255+ } while (!std::atomic_compare_exchange_weak_explicit (
256+ &handlers_, &old,
257+ std::static_pointer_cast<const HandlerMap>(new_map),
256258 std::memory_order_release,
257259 std::memory_order_acquire));
258260
@@ -269,7 +271,7 @@ void WebsocketManager::unsubscribe(
269271 HandlerPtr removed_handler;
270272 bool last_handler = false ;
271273
272- auto old = handlers_. load ( std::memory_order_acquire);
274+ auto old = std::atomic_load_explicit (&handlers_, std::memory_order_acquire);
273275 for (;;) {
274276 auto new_map = std::make_shared<HandlerMap>(*old);
275277 removed_handler.reset ();
@@ -293,8 +295,9 @@ void WebsocketManager::unsubscribe(
293295 }
294296 }
295297
296- if (handlers_.compare_exchange_weak (
297- old, new_map,
298+ if (std::atomic_compare_exchange_weak_explicit (
299+ &handlers_, &old,
300+ std::static_pointer_cast<const HandlerMap>(new_map),
298301 std::memory_order_release,
299302 std::memory_order_acquire))
300303 break ;
0 commit comments