Skip to content

Commit 917e2de

Browse files
committed
Create shared memory in LOCAL namespace;
increase open websocket timeout to 30 sec; fix unregistor dealock
1 parent 6e28f20 commit 917e2de

File tree

5 files changed

+19
-14
lines changed

5 files changed

+19
-14
lines changed
324 KB
Binary file not shown.

zorro_websocket_proxy/src/zorro_websocket_proxy.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
#include "websocket.h"
1010

11-
#define SHM_OWNER TEXT("Global\\ZorroWebsocketProxy_shm_owner")
11+
#define SHM_OWNER TEXT("Local\\ZorroWebsocketProxy_shm_owner")
1212

1313
using namespace zorro::websocket;
1414

@@ -208,16 +208,14 @@ void ZorroWebsocketProxy::handleClientMessage(Message& msg) {
208208
case Message::Type::Subscribe:
209209
handleSubscribe(msg);
210210
break;
211-
212211
case Message::Type::Unsubscribe:
213212
handleUnsubscribe(msg);
214213
break;
215-
216214
case Message::Type::WsData:
217215
case Message::Type::WsError:
218216
break;
219217
default:
220-
lwsl_user("Unknown msg, type=\n", msg.type);
218+
lwsl_user("Unknown msg, type=%d\n", msg.type);
221219
break;
222220
}
223221
}

zorro_websocket_proxy_client/include/types.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77
namespace zorro {
88
namespace websocket {
99

10-
#define CLIENT_TO_SERVER_QUEUE "Global\\ZorroWebsocketProxy_client_server"
11-
#define SERVER_TO_CLIENT_QUEUE "Global\\ZorroWebsocketProxy_server_client"
10+
#define CLIENT_TO_SERVER_QUEUE "Local\\ZorroWebsocketProxy_client_server"
11+
#define SERVER_TO_CLIENT_QUEUE "Local\\ZorroWebsocketProxy_server_client"
1212
#define HEARTBEAT_INTERVAL 500 // 500ms
1313
#define HEARTBEAT_TIMEOUT 15000 // 15s
1414

zorro_websocket_proxy_client/include/zorro_websocket_proxy_client.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ namespace websocket {
104104
uint32_t id_ = 0;
105105
const DWORD pid_;
106106
std::atomic<DWORD> server_pid_ = 0;
107-
std::atomic_bool run_{ false };
107+
std::shared_ptr<std::atomic_bool> run_;
108108
std::string name_;
109109
std::unordered_set<uint32_t> websockets_;
110110
std::unique_ptr<std::thread> worker_thread_;

zorro_websocket_proxy_client/src/zorro_websocket_proxy_client.cpp

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ ZorroWebsocketProxyClient::ZorroWebsocketProxyClient(WebsocketProxyCallback* cal
2525

2626
ZorroWebsocketProxyClient::~ZorroWebsocketProxyClient() {
2727
if (server_pid_.load(std::memory_order_relaxed)) {
28-
unregister();
28+
unregister(true);
2929
}
3030
}
3131

@@ -145,15 +145,20 @@ void ZorroWebsocketProxyClient::unregister(bool destroying) {
145145
sendMessage(msg, index, size);
146146
server_pid_.store(0, std::memory_order_release);
147147
log_(L_INFO, "Unregistered, pid=" + std::to_string(pid_));
148-
run_.store(false, std::memory_order_release);
149148
if (worker_thread_ && worker_thread_->joinable()) {
149+
run_->store(false, std::memory_order_release);
150150
if (destroying) {
151151
#ifdef _WIN32
152152
worker_thread_->detach();
153153
return;
154154
#endif // _WIN32
155155
}
156+
//#ifdef _WIN32
157+
//worker_thread_->detach();
158+
//#else
156159
worker_thread_->join();
160+
//#endif
161+
run_.reset();
157162
worker_thread_.reset();
158163
}
159164
}
@@ -178,8 +183,8 @@ std::pair<uint32_t, bool> ZorroWebsocketProxyClient::openWebSocket(const std::st
178183

179184
sendMessage(msg, index, size);
180185

181-
if (!waitForResponse(msg)) {
182-
log_(L_DEBUG, "oepn ws timedout");
186+
if (!waitForResponse(msg, 30000)) {
187+
log_(L_DEBUG, "open ws timedout");
183188
return std::make_pair(0, false);
184189
}
185190

@@ -248,8 +253,9 @@ void ZorroWebsocketProxyClient::send(uint32_t id, const char* data, size_t len)
248253
}
249254

250255
void ZorroWebsocketProxyClient::doWork() {
251-
run_.store(true, std::memory_order_release);
252-
while (run_.load(std::memory_order_relaxed)) {
256+
run_ = std::make_shared<std::atomic_bool>(true);
257+
std::shared_ptr<std::atomic_bool> run = run_;
258+
while (run->load(std::memory_order_relaxed)) {
253259
auto server_pid = server_pid_.load(std::memory_order_relaxed);
254260
if (!server_pid) {
255261
// not connected yet
@@ -259,7 +265,7 @@ void ZorroWebsocketProxyClient::doWork() {
259265
auto now = get_timestamp();
260266
auto result = server_queue_->read(server_queue_index_);
261267
if (result.first) {
262-
log_(L_DEBUG, ".");
268+
//log_(L_DEBUG, ".");
263269
auto msg = reinterpret_cast<Message*>(result.first);
264270
//log_(L_DEBUG, std::to_string(msg->type));
265271
last_server_heartbeat_time_ = now;
@@ -301,6 +307,7 @@ void ZorroWebsocketProxyClient::doWork() {
301307
}
302308
}
303309
}
310+
log_(L_DEBUG, "WebsocketProxyClient work thread exit");
304311
}
305312

306313
bool ZorroWebsocketProxyClient::sendHeartbeat(uint64_t now) {

0 commit comments

Comments
 (0)