From a749bb8ef1dd0d1a6dbc026ddf4dfe6560a0e7dc Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Wed, 13 Nov 2024 23:32:05 +0300 Subject: [PATCH] engine: server: reset str64 statistics on server deactivate --- engine/server/server.h | 2 +- engine/server/sv_game.c | 14 ++++++++++++-- engine/server/sv_init.c | 2 +- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/engine/server/server.h b/engine/server/server.h index 978e715d..8a5c432a 100644 --- a/engine/server/server.h +++ b/engine/server/server.h @@ -609,7 +609,7 @@ string_t SV_AllocString( const char *szValue ); string_t SV_MakeString( const char *szValue ); const char *SV_GetString( string_t iString ); void SV_SetStringArrayMode( qboolean dynamic ); -void SV_EmptyStringPool( void ); +void SV_EmptyStringPool( qboolean clear_stats ); void SV_PrintStr64Stats_f( void ); sv_client_t *SV_ClientFromEdict( const edict_t *pEdict, qboolean spawned_only ); uint SV_MapIsValid( const char *filename, const char *landmark_name ); diff --git a/engine/server/sv_game.c b/engine/server/sv_game.c index ba37e70b..b1f412fc 100644 --- a/engine/server/sv_game.c +++ b/engine/server/sv_game.c @@ -3009,16 +3009,26 @@ SV_EmptyStringPool Free strings on server stop. Reset string pointer on 64 bits ================== */ -void SV_EmptyStringPool( void ) +void SV_EmptyStringPool( qboolean clear_stats ) { #if XASH_64BIT if( str64.dynamic ) // switch only after array fill (more space for multiplayer games) + { str64.pstringbase = str64.pstringarray; + } else { str64.pstringbase = str64.poldstringbase = str64.pstringarraystatic; str64.plast = str64.pstringbase + 1; } + + if( clear_stats ) + { + str64.maxalloc = 0; + str64.totalalloc = 0; + str64.numdups = 0; + str64.numoverflows = 0; + } #else // !XASH_64BIT Mem_EmptyPool( svgame.stringspool ); #endif // !XASH_64BIT @@ -3043,7 +3053,7 @@ void SV_SetStringArrayMode( qboolean dynamic ) str64.dynamic = dynamic; - SV_EmptyStringPool(); + SV_EmptyStringPool( false ); #endif // !XASH_64BIT } diff --git a/engine/server/sv_init.c b/engine/server/sv_init.c index edd62259..a880e182 100644 --- a/engine/server/sv_init.c +++ b/engine/server/sv_init.c @@ -715,7 +715,7 @@ void SV_DeactivateServer( void ) PM_ClearPhysEnts( svgame.pmove ); - SV_EmptyStringPool(); + SV_EmptyStringPool( true ); for( i = 0; i < svs.maxclients; i++ ) {