From c979e40cb5364f69278500379b85046e0660a864 Mon Sep 17 00:00:00 2001 From: Jith Kumar Date: Thu, 12 Jan 2023 10:15:46 +1100 Subject: [PATCH 1/3] PIKSI-320 Check the state msg_id before requesting state signal --- src/setting_sbp_cb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/setting_sbp_cb.c b/src/setting_sbp_cb.c index 13c77320..2b2265de 100644 --- a/src/setting_sbp_cb.c +++ b/src/setting_sbp_cb.c @@ -303,7 +303,7 @@ static void setting_read_by_index_done_callback(uint16_t sender_id, uint8_t len, /* Traverse the pending requests */ request_state_t *state = ctx->req_list; - while (state != NULL) { + while (state != NULL && state->msg_id == SBP_MSG_SETTINGS_READ_BY_INDEX_REQ) { state->read_by_idx_done = true; request_state_signal(state, &ctx->client_iface, SBP_MSG_SETTINGS_READ_BY_INDEX_REQ); From cf51813c662034357c7c19dc89f2de9a6327e5ce Mon Sep 17 00:00:00 2001 From: Jith Kumar Date: Thu, 12 Jan 2023 10:16:23 +1100 Subject: [PATCH 2/3] PIKSI-320 Add log message when state msg_id do not match request msg_id --- src/request_state.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/request_state.c b/src/request_state.c index 89c53857..2297789c 100644 --- a/src/request_state.c +++ b/src/request_state.c @@ -15,6 +15,7 @@ #include #include +#include #include #include @@ -95,7 +96,12 @@ bool request_state_match(const request_state_t *state) { int request_state_signal(request_state_t *state, settings_api_t *api, uint16_t msg_id) { assert(state); - assert(msg_id == state->msg_id); + + if (msg_id != state->msg_id) { + log_error("Error: request msg_id [%d] do not match state msg_id [%d]", + msg_id, state->msg_id); + assert(!"request msg_id do not match state msg_id"); + } state->match = true; state->pending = false; From 99f1d9dd7d89d0493313102dfafbe373c48bb353 Mon Sep 17 00:00:00 2001 From: Jith Kumar Date: Thu, 12 Jan 2023 14:25:36 +1100 Subject: [PATCH 3/3] Iterate through the full list of request states before returning --- src/setting_sbp_cb.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/setting_sbp_cb.c b/src/setting_sbp_cb.c index 2b2265de..2b6fc459 100644 --- a/src/setting_sbp_cb.c +++ b/src/setting_sbp_cb.c @@ -303,10 +303,13 @@ static void setting_read_by_index_done_callback(uint16_t sender_id, uint8_t len, /* Traverse the pending requests */ request_state_t *state = ctx->req_list; - while (state != NULL && state->msg_id == SBP_MSG_SETTINGS_READ_BY_INDEX_REQ) { - state->read_by_idx_done = true; - request_state_signal(state, &ctx->client_iface, - SBP_MSG_SETTINGS_READ_BY_INDEX_REQ); + while (state != NULL) { + // request state signal only if the msg_id matches + if (state->msg_id == SBP_MSG_SETTINGS_READ_BY_INDEX_REQ) { + state->read_by_idx_done = true; + request_state_signal(state, &ctx->client_iface, + SBP_MSG_SETTINGS_READ_BY_INDEX_REQ); + } state = state->next; } }