From: Alan T. DeKok Date: Sun, 23 Jun 2024 17:05:28 +0000 (-0400) Subject: update stats more quickly X-Git-Tag: release_3_2_5~37 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1348f147fa724ba2aaab56ef5468bb13cab5da5f;p=thirdparty%2Ffreeradius-server.git update stats more quickly --- diff --git a/src/include/radiusd.h b/src/include/radiusd.h index 982f2124c62..4cd9feae369 100644 --- a/src/include/radiusd.h +++ b/src/include/radiusd.h @@ -196,9 +196,8 @@ typedef struct main_config { typedef enum { REQUEST_ACTIVE = 1, REQUEST_STOP_PROCESSING, - REQUEST_COUNTED } rad_master_state_t; -#define REQUEST_MASTER_NUM_STATES (REQUEST_COUNTED + 1) +#define REQUEST_MASTER_NUM_STATES (REQUEST_STOP_PROCESSING + 1) typedef enum { REQUEST_QUEUED = 1, @@ -322,6 +321,7 @@ struct rad_request { #define RAD_REQUEST_OPTION_COA (1 << 0) #define RAD_REQUEST_OPTION_CTX (1 << 1) #define RAD_REQUEST_OPTION_CANCELLED (1 << 2) +#define RAD_REQUEST_OPTION_STATS (1 << 3) #define SECONDS_PER_DAY 86400 #define MAX_REQUEST_TIME 30 diff --git a/src/main/process.c b/src/main/process.c index 69e8b2d705e..88ed0e03e7b 100644 --- a/src/main/process.c +++ b/src/main/process.c @@ -1006,6 +1006,12 @@ static void request_cleanup_delay_init(REQUEST *request) #ifdef HAVE_PTHREAD_H rad_assert(request->child_pid == NO_SUCH_CHILD_PID); #endif + + /* + * Set the statistics immediately if we can. + */ + request_stats_final(request); + STATE_MACHINE_TIMER(FR_ACTION_TIMER); return; } @@ -1258,6 +1264,9 @@ static void request_cleanup_delay(REQUEST *request, int action) #ifdef DEBUG_STATE_MACHINE if (rad_debug_lvl) printf("(%u) ********\tNEXT-STATE %s -> %s\n", request->number, __FUNCTION__, "request_cleanup_delay"); #endif + + request_stats_final(request); + STATE_MACHINE_TIMER(FR_ACTION_TIMER); return; } /* else it's time to clean up */ diff --git a/src/main/stats.c b/src/main/stats.c index 18850e12762..50093c75f95 100644 --- a/src/main/stats.c +++ b/src/main/stats.c @@ -93,7 +93,7 @@ void request_stats_final(REQUEST *request) rad_listen_t *listener; RADCLIENT *client; - if (request->master_state == REQUEST_COUNTED) return; + if ((request->options & RAD_REQUEST_OPTION_STATS) != 0) return; /* don't count statistic requests */ if (request->packet->code == PW_CODE_STATUS_SERVER) { @@ -380,7 +380,7 @@ void request_stats_final(REQUEST *request) } } - request->master_state = REQUEST_COUNTED; + request->options |= RAD_REQUEST_OPTION_STATS; } typedef struct fr_stats2vp {