Fix clients not having session-expiry-time updated on broker close

Issue #3645.
This commit is contained in:
Roger A. Light 2026-05-10 23:00:20 +01:00
parent b94b9477e5
commit 5a830e1a78
No known key found for this signature in database
GPG key ID: 779B22DFB3E717B7
3 changed files with 18 additions and 0 deletions

View file

@ -344,6 +344,7 @@ static void post_shutdown_cleanup(void)
context__send_will(ctxt);
}
will_delay__send_all();
session_expiry__add_on_shutdown();
/* Set to true only after persistence events have been processed */
db.shutdown = true;

View file

@ -935,6 +935,7 @@ void unpwd__free_item(struct mosquitto__unpwd **unpwd, struct mosquitto__unpwd *
* ============================================================ */
int session_expiry__add(struct mosquitto *context);
int session_expiry__add_from_persistence(struct mosquitto *context, time_t expiry_time);
void session_expiry__add_on_shutdown(void);
void session_expiry__remove(struct mosquitto *context);
void session_expiry__remove_all(void);
void session_expiry__check(void);

View file

@ -134,6 +134,22 @@ int session_expiry__add_from_persistence(struct mosquitto *context, time_t expir
}
void session_expiry__add_on_shutdown(void)
{
struct mosquitto *ctxt, *ctxt_tmp;
HASH_ITER(hh_id, db.contexts_by_id, ctxt, ctxt_tmp){
if(ctxt->bridge == NULL
&& ctxt->is_persisted
&& ctxt->session_expiry_interval != MQTT_SESSION_EXPIRY_IMMEDIATE
){
session_expiry__add(ctxt);
}
}
}
void session_expiry__remove(struct mosquitto *context)
{
if(context->expiry_list_item){