From: Arran Cudbard-Bell Date: Thu, 29 Jan 2026 18:53:24 +0000 (-0800) Subject: Exfile allow immediate cleanup if idle_time is 0 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=dd5f1e99a7bd79e9468919da81b8a54066f3cb57;p=thirdparty%2Ffreeradius-server.git Exfile allow immediate cleanup if idle_time is 0 --- diff --git a/src/lib/server/exfile.c b/src/lib/server/exfile.c index f0bb77f025e..1d3826b5ddb 100644 --- a/src/lib/server/exfile.c +++ b/src/lib/server/exfile.c @@ -32,6 +32,7 @@ #include #include #include +#include #include @@ -63,6 +64,8 @@ typedef struct { struct exfile_s { uint32_t max_entries; //!< How many file descriptors we keep track of. fr_time_delta_t max_idle; //!< Maximum idle time for a descriptor. + ///< If this is zero, the descriptor will be closed + ///< immediately after it is unlocked. fr_time_t last_cleaned; pthread_mutex_t mutex; exfile_entry_t *entries; @@ -556,6 +559,17 @@ static int exfile_close_lock(exfile_t *ef, int fd) (void) lseek(ef->entries[i].fd, 0, SEEK_SET); (void) rad_unlockfd(ef->entries[i].fd, 0); + + /* + * If max idle is 0, then clean up the file immediately + * this is mostly used for testing. + */ + if (fr_time_delta_eq(ef->max_idle, fr_time_delta_from_sec(0))) { + exfile_cleanup_entry(ef, &ef->entries[i]); + pthread_mutex_unlock(&(ef->mutex)); + return 0; + } + pthread_mutex_unlock(&(ef->mutex)); exfile_trigger(ef, &ef->entries[i], EXFILE_TRIGGER_RELEASE);