Skip to content

Commit aab4a2d

Browse files
committed
mod: concurrent bridge calls
1 parent a4ddc3d commit aab4a2d

File tree

1 file changed

+22
-19
lines changed

1 file changed

+22
-19
lines changed

src/bridge.h

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ class BridgeClass {
2626

2727
struct k_mutex read_mutex;
2828
struct k_mutex write_mutex;
29-
struct k_mutex server_mutex;
30-
struct k_mutex client_mutex;
29+
//struct k_mutex server_mutex;
30+
//struct k_mutex client_mutex;
3131

3232
k_tid_t upd_tid;
3333
k_thread_stack_t *upd_stack_area;
@@ -46,8 +46,8 @@ class BridgeClass {
4646

4747
k_mutex_init(&read_mutex);
4848
k_mutex_init(&write_mutex);
49-
k_mutex_init(&server_mutex);
50-
k_mutex_init(&client_mutex);
49+
//k_mutex_init(&server_mutex);
50+
//k_mutex_init(&client_mutex);
5151

5252
client = new RPCClient(*transport);
5353
server = new RPCServer(*transport);
@@ -85,26 +85,27 @@ class BridgeClass {
8585

8686
void update() {
8787

88-
if (k_mutex_lock(&server_mutex, K_MSEC(10)) != 0) return;
88+
//if (k_mutex_lock(&server_mutex, K_MSEC(10)) != 0) return;
8989

9090
// Lock read mutex
9191
if (k_mutex_lock(&read_mutex, K_MSEC(10)) != 0 ) return;
9292

93-
if (!server->get_rpc()) {
93+
RPCRequest<> req;
94+
if (!server->get_rpc(req)) {
9495
k_mutex_unlock(&read_mutex);
9596
k_msleep(1);
9697
return;
9798
}
9899

99100
k_mutex_unlock(&read_mutex);
100101

101-
server->process_request();
102+
server->process_request(req);
102103

103104
// Lock write mutex
104105
while (true) {
105106

106107
if (k_mutex_lock(&write_mutex, K_MSEC(10)) == 0){
107-
server->send_response();
108+
server->send_response(req);
108109
k_mutex_unlock(&write_mutex);
109110
k_msleep(1);
110111
break;
@@ -114,19 +115,20 @@ class BridgeClass {
114115

115116
}
116117

117-
k_mutex_unlock(&server_mutex);
118+
//k_mutex_unlock(&server_mutex);
118119

119120
}
120121

121122
template<typename RType, typename... Args>
122123
bool call(const MsgPack::str_t method, RType& result, Args&&... args) {
123124

124-
k_mutex_lock(&client_mutex, K_FOREVER);
125-
125+
//k_mutex_lock(&client_mutex, K_FOREVER);
126+
uint32_t msg_id_wait;
127+
126128
// Lock write mutex
127129
while (true) {
128130
if (k_mutex_lock(&write_mutex, K_MSEC(10)) == 0) {
129-
client->send_rpc(method, std::forward<Args>(args)...);
131+
client->send_rpc(method, msg_id_wait, std::forward<Args>(args)...);
130132
k_mutex_unlock(&write_mutex);
131133
k_msleep(1);
132134
break;
@@ -138,7 +140,7 @@ class BridgeClass {
138140
// Lock read mutex
139141
while(true) {
140142
if (k_mutex_lock(&read_mutex, K_MSEC(10)) == 0 ) {
141-
if (client->get_response(result)) {
143+
if (client->get_response(msg_id_wait, result)) {
142144
k_mutex_unlock(&read_mutex);
143145
k_msleep(1);
144146
break;
@@ -153,7 +155,7 @@ class BridgeClass {
153155

154156
return (client->lastError.code == NO_ERR);
155157

156-
k_mutex_unlock(&client_mutex);
158+
//k_mutex_unlock(&client_mutex);
157159

158160
}
159161

@@ -174,26 +176,27 @@ class BridgeClass {
174176

175177
void update_safe() {
176178

177-
if (k_mutex_lock(&server_mutex, K_MSEC(10)) != 0) return;
179+
//if (k_mutex_lock(&server_mutex, K_MSEC(10)) != 0) return;
178180

179181
// Lock read mutex
180182
if (k_mutex_lock(&read_mutex, K_MSEC(10)) != 0 ) return;
181183

182-
if (!server->get_rpc()) {
184+
RPCRequest<> req;
185+
if (!server->get_rpc(req, "__safe__")) {
183186
k_mutex_unlock(&read_mutex);
184187
k_msleep(1);
185188
return;
186189
}
187190

188191
k_mutex_unlock(&read_mutex);
189192

190-
server->process_request("__safe__");
193+
server->process_request(req);
191194

192195
// Lock write mutex
193196
while (true) {
194197

195198
if (k_mutex_lock(&write_mutex, K_MSEC(10)) == 0){
196-
server->send_response();
199+
server->send_response(req);
197200
k_mutex_unlock(&write_mutex);
198201
k_msleep(1);
199202
break;
@@ -203,7 +206,7 @@ class BridgeClass {
203206

204207
}
205208

206-
k_mutex_unlock(&server_mutex);
209+
//k_mutex_unlock(&server_mutex);
207210

208211
}
209212

0 commit comments

Comments
 (0)