@@ -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