From c99502a2567bf9147b3d811cb17e38ad51f08660 Mon Sep 17 00:00:00 2001 From: "Roger A. Light" Date: Mon, 23 May 2022 23:05:49 +0100 Subject: [PATCH] Add clients to session expiry check list when restarting and reloading from persistence. Closes #2546. Thanks to Joachim Schachermayer. --- ChangeLog.txt | 2 ++ src/mosquitto_broker_internal.h | 1 + src/persist_read.c | 2 +- src/session_expiry.c | 17 +++++++++++++++++ 4 files changed, 21 insertions(+), 1 deletion(-) diff --git a/ChangeLog.txt b/ChangeLog.txt index 18bd565d54..3b107be048 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -11,6 +11,8 @@ Broker: required for MQTT v3.1. Closes #2522. - Improve documentation of `persistent_client_expiration` option. Closes #2404. +- Add clients to session expiry check list when restarting and reloading from + persistence. Closes #2546. Client library: - Fix threads library detection on Windows under cmake. Bumps the minimum diff --git a/src/mosquitto_broker_internal.h b/src/mosquitto_broker_internal.h index 5d4f5de53c..8f2ad0b25c 100644 --- a/src/mosquitto_broker_internal.h +++ b/src/mosquitto_broker_internal.h @@ -818,6 +818,7 @@ void unpwd__free_item(struct mosquitto__unpwd **unpwd, struct mosquitto__unpwd * * Session expiry * ============================================================ */ int session_expiry__add(struct mosquitto *context); +int session_expiry__add_from_persistence(struct mosquitto *context, time_t expiry_time); void session_expiry__remove(struct mosquitto *context); void session_expiry__remove_all(void); void session_expiry__check(void); diff --git a/src/persist_read.c b/src/persist_read.c index 5e7be454fa..107e8602a4 100644 --- a/src/persist_read.c +++ b/src/persist_read.c @@ -208,7 +208,7 @@ static int persist__client_chunk_restore(FILE *db_fptr) } } } - /* FIXME - we should expire clients here if they have exceeded their time */ + session_expiry__add_from_persistence(context, chunk.F.session_expiry_time); }else{ rc = 1; } diff --git a/src/session_expiry.c b/src/session_expiry.c index 2ecceb740c..470a12a631 100644 --- a/src/session_expiry.c +++ b/src/session_expiry.c @@ -82,6 +82,23 @@ int session_expiry__add(struct mosquitto *context) } +int session_expiry__add_from_persistence(struct mosquitto *context, time_t expiry_time) +{ + struct session_expiry_list *item; + + item = mosquitto__calloc(1, sizeof(struct session_expiry_list)); + if(!item) return MOSQ_ERR_NOMEM; + + item->context = context; + item->context->session_expiry_time = expiry_time; + context->expiry_list_item = item; + + DL_INSERT_INORDER(expiry_list, item, session_expiry__cmp); + + return MOSQ_ERR_SUCCESS; +} + + void session_expiry__remove(struct mosquitto *context) { if(context->expiry_list_item){