From aab4a2d29816cfd125243a59d1e82b61ce7890d0 Mon Sep 17 00:00:00 2001 From: Lucio Rossi Date: Wed, 30 Jul 2025 15:43:46 +0200 Subject: [PATCH 1/2] mod: concurrent bridge calls --- src/bridge.h | 41 ++++++++++++++++++++++------------------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/src/bridge.h b/src/bridge.h index 5bf57fe..9f15408 100644 --- a/src/bridge.h +++ b/src/bridge.h @@ -26,8 +26,8 @@ class BridgeClass { struct k_mutex read_mutex; struct k_mutex write_mutex; - struct k_mutex server_mutex; - struct k_mutex client_mutex; + //struct k_mutex server_mutex; + //struct k_mutex client_mutex; k_tid_t upd_tid; k_thread_stack_t *upd_stack_area; @@ -46,8 +46,8 @@ class BridgeClass { k_mutex_init(&read_mutex); k_mutex_init(&write_mutex); - k_mutex_init(&server_mutex); - k_mutex_init(&client_mutex); + //k_mutex_init(&server_mutex); + //k_mutex_init(&client_mutex); client = new RPCClient(*transport); server = new RPCServer(*transport); @@ -85,12 +85,13 @@ class BridgeClass { void update() { - if (k_mutex_lock(&server_mutex, K_MSEC(10)) != 0) return; + //if (k_mutex_lock(&server_mutex, K_MSEC(10)) != 0) return; // Lock read mutex if (k_mutex_lock(&read_mutex, K_MSEC(10)) != 0 ) return; - if (!server->get_rpc()) { + RPCRequest<> req; + if (!server->get_rpc(req)) { k_mutex_unlock(&read_mutex); k_msleep(1); return; @@ -98,13 +99,13 @@ class BridgeClass { k_mutex_unlock(&read_mutex); - server->process_request(); + server->process_request(req); // Lock write mutex while (true) { if (k_mutex_lock(&write_mutex, K_MSEC(10)) == 0){ - server->send_response(); + server->send_response(req); k_mutex_unlock(&write_mutex); k_msleep(1); break; @@ -114,19 +115,20 @@ class BridgeClass { } - k_mutex_unlock(&server_mutex); + //k_mutex_unlock(&server_mutex); } template bool call(const MsgPack::str_t method, RType& result, Args&&... args) { - k_mutex_lock(&client_mutex, K_FOREVER); - + //k_mutex_lock(&client_mutex, K_FOREVER); + uint32_t msg_id_wait; + // Lock write mutex while (true) { if (k_mutex_lock(&write_mutex, K_MSEC(10)) == 0) { - client->send_rpc(method, std::forward(args)...); + client->send_rpc(method, msg_id_wait, std::forward(args)...); k_mutex_unlock(&write_mutex); k_msleep(1); break; @@ -138,7 +140,7 @@ class BridgeClass { // Lock read mutex while(true) { if (k_mutex_lock(&read_mutex, K_MSEC(10)) == 0 ) { - if (client->get_response(result)) { + if (client->get_response(msg_id_wait, result)) { k_mutex_unlock(&read_mutex); k_msleep(1); break; @@ -153,7 +155,7 @@ class BridgeClass { return (client->lastError.code == NO_ERR); - k_mutex_unlock(&client_mutex); + //k_mutex_unlock(&client_mutex); } @@ -174,12 +176,13 @@ class BridgeClass { void update_safe() { - if (k_mutex_lock(&server_mutex, K_MSEC(10)) != 0) return; + //if (k_mutex_lock(&server_mutex, K_MSEC(10)) != 0) return; // Lock read mutex if (k_mutex_lock(&read_mutex, K_MSEC(10)) != 0 ) return; - if (!server->get_rpc()) { + RPCRequest<> req; + if (!server->get_rpc(req, "__safe__")) { k_mutex_unlock(&read_mutex); k_msleep(1); return; @@ -187,13 +190,13 @@ class BridgeClass { k_mutex_unlock(&read_mutex); - server->process_request("__safe__"); + server->process_request(req); // Lock write mutex while (true) { if (k_mutex_lock(&write_mutex, K_MSEC(10)) == 0){ - server->send_response(); + server->send_response(req); k_mutex_unlock(&write_mutex); k_msleep(1); break; @@ -203,7 +206,7 @@ class BridgeClass { } - k_mutex_unlock(&server_mutex); + //k_mutex_unlock(&server_mutex); } From c5b63476f48704458284fe9891285769dd33cf48 Mon Sep 17 00:00:00 2001 From: Lucio Rossi Date: Wed, 30 Jul 2025 16:02:54 +0200 Subject: [PATCH 2/2] rem: commented muxes --- src/bridge.h | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) diff --git a/src/bridge.h b/src/bridge.h index 9f15408..d8d1e23 100644 --- a/src/bridge.h +++ b/src/bridge.h @@ -26,8 +26,6 @@ class BridgeClass { struct k_mutex read_mutex; struct k_mutex write_mutex; - //struct k_mutex server_mutex; - //struct k_mutex client_mutex; k_tid_t upd_tid; k_thread_stack_t *upd_stack_area; @@ -46,8 +44,6 @@ class BridgeClass { k_mutex_init(&read_mutex); k_mutex_init(&write_mutex); - //k_mutex_init(&server_mutex); - //k_mutex_init(&client_mutex); client = new RPCClient(*transport); server = new RPCServer(*transport); @@ -85,8 +81,6 @@ class BridgeClass { void update() { - //if (k_mutex_lock(&server_mutex, K_MSEC(10)) != 0) return; - // Lock read mutex if (k_mutex_lock(&read_mutex, K_MSEC(10)) != 0 ) return; @@ -115,16 +109,13 @@ class BridgeClass { } - //k_mutex_unlock(&server_mutex); - } template bool call(const MsgPack::str_t method, RType& result, Args&&... args) { - //k_mutex_lock(&client_mutex, K_FOREVER); uint32_t msg_id_wait; - + // Lock write mutex while (true) { if (k_mutex_lock(&write_mutex, K_MSEC(10)) == 0) { @@ -155,8 +146,6 @@ class BridgeClass { return (client->lastError.code == NO_ERR); - //k_mutex_unlock(&client_mutex); - } template @@ -176,8 +165,6 @@ class BridgeClass { void update_safe() { - //if (k_mutex_lock(&server_mutex, K_MSEC(10)) != 0) return; - // Lock read mutex if (k_mutex_lock(&read_mutex, K_MSEC(10)) != 0 ) return; @@ -205,8 +192,6 @@ class BridgeClass { } } - - //k_mutex_unlock(&server_mutex); }