From 08610f7c99c599deaf0b209ec30b89aca240c9d2 Mon Sep 17 00:00:00 2001 From: "Roger A. Light" Date: Fri, 5 Aug 2022 22:57:27 +0100 Subject: [PATCH] Further fix for #2546. --- src/persist_write.c | 5 +++++ src/session_expiry.c | 8 ++++++++ 2 files changed, 13 insertions(+) diff --git a/src/persist_write.c b/src/persist_write.c index ccfbc29cdd..0df016ec0c 100644 --- a/src/persist_write.c +++ b/src/persist_write.c @@ -169,6 +169,11 @@ static int persist__client_save(FILE *db_fptr) HASH_ITER(hh_id, db.contexts_by_id, context, ctxt_tmp){ if(context && context->clean_start == false){ chunk.F.session_expiry_time = context->session_expiry_time; + if(context->session_expiry_interval != 0 && context->session_expiry_interval != UINT32_MAX && context->session_expiry_time == 0){ + chunk.F.session_expiry_time = context->session_expiry_interval + db.now_real_s; + }else{ + chunk.F.session_expiry_time = context->session_expiry_time; + } chunk.F.session_expiry_interval = context->session_expiry_interval; chunk.F.last_mid = context->last_mid; chunk.F.id_len = (uint16_t)strlen(context->id); diff --git a/src/session_expiry.c b/src/session_expiry.c index 470a12a631..98913d8aa4 100644 --- a/src/session_expiry.c +++ b/src/session_expiry.c @@ -86,6 +86,14 @@ int session_expiry__add_from_persistence(struct mosquitto *context, time_t expir { struct session_expiry_list *item; + if(db.config->persistent_client_expiration == 0){ + if(context->session_expiry_interval == UINT32_MAX){ + /* There isn't a global expiry set, and the client has asked to + * never expire, so we don't add it to the list. */ + return MOSQ_ERR_SUCCESS; + } + } + item = mosquitto__calloc(1, sizeof(struct session_expiry_list)); if(!item) return MOSQ_ERR_NOMEM;