Add clients to session expiry check list when restarting and reloading from persistence.

Closes #2546. Thanks to Joachim Schachermayer.
This commit is contained in:
Roger A. Light 2022-05-23 23:05:49 +01:00
parent 80b36919b1
commit c99502a256
4 changed files with 21 additions and 1 deletions

View File

@ -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

View File

@ -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);

View File

@ -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;
}

View File

@ -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){