From 1512074e0c0a4b4a6c4b6c533169e4f82152de81 Mon Sep 17 00:00:00 2001 From: Damian Krolik Date: Mon, 13 Jan 2025 09:18:30 +0100 Subject: [PATCH] logging: rpc: disable overwriting while history transfer While the log history is being transferred to the logging RPC client, do not overwrite the least recent logs in the log history, so that the history being transferred doesn't have gaps. Signed-off-by: Damian Krolik --- subsys/logging/log_backend_rpc.c | 2 ++ subsys/logging/log_backend_rpc_history.h | 1 + subsys/logging/log_backend_rpc_history_ram.c | 13 +++++++++++++ 3 files changed, 16 insertions(+) diff --git a/subsys/logging/log_backend_rpc.c b/subsys/logging/log_backend_rpc.c index 49c42cdcac5c..2d35351f2a57 100644 --- a/subsys/logging/log_backend_rpc.c +++ b/subsys/logging/log_backend_rpc.c @@ -518,6 +518,7 @@ static void history_transfer_task(struct k_work *work) } else { log_rpc_history_free(history_cur_msg); history_cur_msg = NULL; + log_rpc_history_set_overwriting(true); } k_mutex_unlock(&history_transfer_mtx); @@ -541,6 +542,7 @@ static void log_rpc_fetch_history_handler(const struct nrf_rpc_group *group, k_mutex_lock(&history_transfer_mtx, K_FOREVER); history_transfer_id = transfer_id; + log_rpc_history_set_overwriting(false); k_work_submit_to_queue(&history_transfer_workq, &history_transfer_work); k_mutex_unlock(&history_transfer_mtx); diff --git a/subsys/logging/log_backend_rpc_history.h b/subsys/logging/log_backend_rpc_history.h index 7dde6e908d47..752e4d23b49a 100644 --- a/subsys/logging/log_backend_rpc_history.h +++ b/subsys/logging/log_backend_rpc_history.h @@ -12,6 +12,7 @@ void log_rpc_history_init(void); void log_rpc_history_push(const union log_msg_generic *msg); +void log_rpc_history_set_overwriting(bool overwriting); union log_msg_generic *log_rpc_history_pop(void); void log_rpc_history_free(const union log_msg_generic *msg); diff --git a/subsys/logging/log_backend_rpc_history_ram.c b/subsys/logging/log_backend_rpc_history_ram.c index 03aa25e4db86..691a7afee3cb 100644 --- a/subsys/logging/log_backend_rpc_history_ram.c +++ b/subsys/logging/log_backend_rpc_history_ram.c @@ -47,6 +47,19 @@ void log_rpc_history_push(const union log_msg_generic *msg) mpsc_pbuf_commit(&log_history_pbuf, ©->buf); } +void log_rpc_history_set_overwriting(bool overwriting) +{ + k_sched_lock(); + + if (overwriting) { + log_history_pbuf.flags |= MPSC_PBUF_MODE_OVERWRITE; + } else { + log_history_pbuf.flags &= (~MPSC_PBUF_MODE_OVERWRITE); + } + + k_sched_unlock(); +} + union log_msg_generic *log_rpc_history_pop(void) { return (union log_msg_generic *)mpsc_pbuf_claim(&log_history_pbuf);