Skip to content

Commit ae25491

Browse files
authored
Merge pull request #7 from bcmi-labs/concurrent_features
Concurrent features
2 parents a4ddc3d + c5b6347 commit ae25491

File tree

1 file changed

+11
-23
lines changed

1 file changed

+11
-23
lines changed

src/bridge.h

Lines changed: 11 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,6 @@ 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;
3129

3230
k_tid_t upd_tid;
3331
k_thread_stack_t *upd_stack_area;
@@ -46,8 +44,6 @@ class BridgeClass {
4644

4745
k_mutex_init(&read_mutex);
4846
k_mutex_init(&write_mutex);
49-
k_mutex_init(&server_mutex);
50-
k_mutex_init(&client_mutex);
5147

5248
client = new RPCClient(*transport);
5349
server = new RPCServer(*transport);
@@ -85,26 +81,25 @@ class BridgeClass {
8581

8682
void update() {
8783

88-
if (k_mutex_lock(&server_mutex, K_MSEC(10)) != 0) return;
89-
9084
// Lock read mutex
9185
if (k_mutex_lock(&read_mutex, K_MSEC(10)) != 0 ) return;
9286

93-
if (!server->get_rpc()) {
87+
RPCRequest<> req;
88+
if (!server->get_rpc(req)) {
9489
k_mutex_unlock(&read_mutex);
9590
k_msleep(1);
9691
return;
9792
}
9893

9994
k_mutex_unlock(&read_mutex);
10095

101-
server->process_request();
96+
server->process_request(req);
10297

10398
// Lock write mutex
10499
while (true) {
105100

106101
if (k_mutex_lock(&write_mutex, K_MSEC(10)) == 0){
107-
server->send_response();
102+
server->send_response(req);
108103
k_mutex_unlock(&write_mutex);
109104
k_msleep(1);
110105
break;
@@ -114,19 +109,17 @@ class BridgeClass {
114109

115110
}
116111

117-
k_mutex_unlock(&server_mutex);
118-
119112
}
120113

121114
template<typename RType, typename... Args>
122115
bool call(const MsgPack::str_t method, RType& result, Args&&... args) {
123116

124-
k_mutex_lock(&client_mutex, K_FOREVER);
117+
uint32_t msg_id_wait;
125118

126119
// Lock write mutex
127120
while (true) {
128121
if (k_mutex_lock(&write_mutex, K_MSEC(10)) == 0) {
129-
client->send_rpc(method, std::forward<Args>(args)...);
122+
client->send_rpc(method, msg_id_wait, std::forward<Args>(args)...);
130123
k_mutex_unlock(&write_mutex);
131124
k_msleep(1);
132125
break;
@@ -138,7 +131,7 @@ class BridgeClass {
138131
// Lock read mutex
139132
while(true) {
140133
if (k_mutex_lock(&read_mutex, K_MSEC(10)) == 0 ) {
141-
if (client->get_response(result)) {
134+
if (client->get_response(msg_id_wait, result)) {
142135
k_mutex_unlock(&read_mutex);
143136
k_msleep(1);
144137
break;
@@ -153,8 +146,6 @@ class BridgeClass {
153146

154147
return (client->lastError.code == NO_ERR);
155148

156-
k_mutex_unlock(&client_mutex);
157-
158149
}
159150

160151
template<typename... Args>
@@ -174,26 +165,25 @@ class BridgeClass {
174165

175166
void update_safe() {
176167

177-
if (k_mutex_lock(&server_mutex, K_MSEC(10)) != 0) return;
178-
179168
// Lock read mutex
180169
if (k_mutex_lock(&read_mutex, K_MSEC(10)) != 0 ) return;
181170

182-
if (!server->get_rpc()) {
171+
RPCRequest<> req;
172+
if (!server->get_rpc(req, "__safe__")) {
183173
k_mutex_unlock(&read_mutex);
184174
k_msleep(1);
185175
return;
186176
}
187177

188178
k_mutex_unlock(&read_mutex);
189179

190-
server->process_request("__safe__");
180+
server->process_request(req);
191181

192182
// Lock write mutex
193183
while (true) {
194184

195185
if (k_mutex_lock(&write_mutex, K_MSEC(10)) == 0){
196-
server->send_response();
186+
server->send_response(req);
197187
k_mutex_unlock(&write_mutex);
198188
k_msleep(1);
199189
break;
@@ -202,8 +192,6 @@ class BridgeClass {
202192
}
203193

204194
}
205-
206-
k_mutex_unlock(&server_mutex);
207195

208196
}
209197

0 commit comments

Comments
 (0)