Skip to content

Commit 8c1a50e

Browse files
committed
Fix mac os build issue
1 parent 9d2cc3b commit 8c1a50e

2 files changed

Lines changed: 12 additions & 9 deletions

File tree

include/hyperliquid/websocket_manager.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ class WebsocketManager {
7474
using HandlerPtr = std::shared_ptr<Handler>;
7575
using HandlerMap = std::unordered_map<std::string, std::vector<HandlerPtr>>;
7676

77-
std::atomic<std::shared_ptr<const HandlerMap>> handlers_;
77+
std::shared_ptr<const HandlerMap> handlers_;
7878

7979
std::atomic<bool> connected_{false};
8080
std::atomic<bool> running_{true};

src/websocket_manager.cpp

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)