Skip to content

Commit 4a63d27

Browse files
committed
feat: server_mux and client_mux
1 parent 5f0df16 commit 4a63d27

File tree

1 file changed

+18
-22
lines changed

1 file changed

+18
-22
lines changed

src/bridge.h

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

2727
struct k_mutex read_mutex;
2828
struct k_mutex write_mutex;
29-
struct k_mutex proc_mutex;
29+
struct k_mutex server_mutex;
30+
struct k_mutex client_mutex;
3031

3132
k_tid_t upd_tid;
3233
k_thread_stack_t *upd_stack_area;
@@ -45,7 +46,8 @@ class BridgeClass {
4546

4647
k_mutex_init(&read_mutex);
4748
k_mutex_init(&write_mutex);
48-
k_mutex_init(&proc_mutex);
49+
k_mutex_init(&server_mutex);
50+
k_mutex_init(&client_mutex);
4951

5052
client = new RPCClient(*transport);
5153
server = new RPCServer(*transport);
@@ -83,6 +85,8 @@ class BridgeClass {
8385

8486
void update() {
8587

88+
if (k_mutex_lock(&server_mutex, K_MSEC(10)) != 0) return;
89+
8690
// Lock read mutex
8791
if (k_mutex_lock(&read_mutex, K_MSEC(10)) != 0 ) return;
8892

@@ -94,16 +98,7 @@ class BridgeClass {
9498

9599
k_mutex_unlock(&read_mutex);
96100

97-
while (true) {
98-
if (k_mutex_lock(&proc_mutex, K_MSEC(10)) == 0){
99-
server->process_request();
100-
k_mutex_unlock(&proc_mutex);
101-
k_msleep(1);
102-
break;
103-
} else {
104-
k_msleep(1);
105-
}
106-
}
101+
server->process_request();
107102

108103
// Lock write mutex
109104
while (true) {
@@ -119,11 +114,15 @@ class BridgeClass {
119114

120115
}
121116

117+
k_mutex_unlock(&server_mutex);
118+
122119
}
123120

124121
template<typename RType, typename... Args>
125122
bool call(const MsgPack::str_t method, RType& result, Args&&... args) {
126123

124+
k_mutex_lock(&client_mutex, K_FOREVER);
125+
127126
// Lock write mutex
128127
while (true) {
129128
if (k_mutex_lock(&write_mutex, K_MSEC(10)) == 0) {
@@ -154,6 +153,8 @@ class BridgeClass {
154153

155154
return (client->lastError.code == NO_ERR);
156155

156+
k_mutex_unlock(&client_mutex);
157+
157158
}
158159

159160
template<typename... Args>
@@ -173,6 +174,8 @@ class BridgeClass {
173174

174175
void update_safe() {
175176

177+
if (k_mutex_lock(&server_mutex, K_MSEC(10)) != 0) return;
178+
176179
// Lock read mutex
177180
if (k_mutex_lock(&read_mutex, K_MSEC(10)) != 0 ) return;
178181

@@ -184,16 +187,7 @@ class BridgeClass {
184187

185188
k_mutex_unlock(&read_mutex);
186189

187-
while (true) {
188-
if (k_mutex_lock(&proc_mutex, K_MSEC(10)) == 0){
189-
server->process_request("__safe__");
190-
k_mutex_unlock(&proc_mutex);
191-
k_msleep(1);
192-
break;
193-
} else {
194-
k_msleep(1);
195-
}
196-
}
190+
server->process_request("__safe__");
197191

198192
// Lock write mutex
199193
while (true) {
@@ -209,6 +203,8 @@ class BridgeClass {
209203

210204
}
211205

206+
k_mutex_unlock(&server_mutex);
207+
212208
}
213209

214210
friend class BridgeClassUpdater;

0 commit comments

Comments
 (0)