From 7d22ab5fe697f1598755dddf35adc5eec614a0b2 Mon Sep 17 00:00:00 2001 From: David Cermak Date: Sun, 5 May 2019 22:30:46 +0200 Subject: [PATCH] pending_msg_count update on delete expired from outbox Closes #111 --- lib/include/mqtt_outbox.h | 2 +- lib/mqtt_outbox.c | 7 +++++-- mqtt_client.c | 6 +++++- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/lib/include/mqtt_outbox.h b/lib/include/mqtt_outbox.h index c9422e9..3939d7c 100644 --- a/lib/include/mqtt_outbox.h +++ b/lib/include/mqtt_outbox.h @@ -41,7 +41,7 @@ uint8_t* outbox_item_get_data(outbox_item_handle_t item, size_t *len, uint16_t esp_err_t outbox_delete(outbox_handle_t outbox, int msg_id, int msg_type); esp_err_t outbox_delete_msgid(outbox_handle_t outbox, int msg_id); esp_err_t outbox_delete_msgtype(outbox_handle_t outbox, int msg_type); -esp_err_t outbox_delete_expired(outbox_handle_t outbox, int current_tick, int timeout); +int outbox_delete_expired(outbox_handle_t outbox, int current_tick, int timeout); esp_err_t outbox_set_pending(outbox_handle_t outbox, int msg_id, pending_state_t pending); int outbox_get_size(outbox_handle_t outbox); diff --git a/lib/mqtt_outbox.c b/lib/mqtt_outbox.c index 2ef3689..04bbce6 100644 --- a/lib/mqtt_outbox.c +++ b/lib/mqtt_outbox.c @@ -145,18 +145,21 @@ esp_err_t outbox_delete_msgtype(outbox_handle_t outbox, int msg_type) return ESP_OK; } -esp_err_t outbox_delete_expired(outbox_handle_t outbox, int current_tick, int timeout) +int outbox_delete_expired(outbox_handle_t outbox, int current_tick, int timeout) { + int deleted_items = 0; outbox_item_handle_t item, tmp; STAILQ_FOREACH_SAFE(item, outbox, next, tmp) { if (current_tick - item->tick > timeout) { STAILQ_REMOVE(outbox, item, outbox_item, next); + printf("free message\n"); free(item->buffer); free(item); + deleted_items ++; } } - return ESP_OK; + return deleted_items; } int outbox_get_size(outbox_handle_t outbox) diff --git a/mqtt_client.c b/mqtt_client.c index 1aa7011..6face26 100644 --- a/mqtt_client.c +++ b/mqtt_client.c @@ -1011,7 +1011,11 @@ static void esp_mqtt_task(void *pv) } //Delete mesaage after 30 senconds - outbox_delete_expired(client->outbox, platform_tick_get_ms(), OUTBOX_EXPIRED_TIMEOUT_MS); + int deleted = outbox_delete_expired(client->outbox, platform_tick_get_ms(), OUTBOX_EXPIRED_TIMEOUT_MS); + client->mqtt_state.pending_msg_count -= deleted; + if (client->mqtt_state.pending_msg_count < 0) { + client->mqtt_state.pending_msg_count = 0; + } // outbox_cleanup(client->outbox, OUTBOX_MAX_SIZE); break;