From f50de70308ddfa3d8477634318fa059e11f52a30 Mon Sep 17 00:00:00 2001 From: Sascha Schumann Date: Wed, 29 Mar 2000 20:37:29 +0000 Subject: [PATCH] GC now prints out how many session objects were removed --- ext/session/mod_mm.c | 5 ++++- ext/session/php_session.h | 2 +- ext/session/session.c | 9 +++++++-- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/ext/session/mod_mm.c b/ext/session/mod_mm.c index 3ba73fcc32..8720bec21d 100644 --- a/ext/session/mod_mm.c +++ b/ext/session/mod_mm.c @@ -305,6 +305,7 @@ PS_GC_FUNC(mm) time_t now; ps_sd *sd, *next; + *nrdels = 0; ps_mm_debug("gc\n"); mm_lock(data->mm, MM_LOCK_RW); @@ -315,8 +316,10 @@ PS_GC_FUNC(mm) for (sd = data->hash[h]; sd; sd = next) { next = sd->next; ps_mm_debug("looking at %s\n", sd->key); - if ((now - sd->ctime) > maxlifetime) + if ((now - sd->ctime) > maxlifetime) { ps_sd_destroy(data, sd); + *nrdels++; + } } mm_unlock(data->mm); diff --git a/ext/session/php_session.h b/ext/session/php_session.h index ab5cb0df5c..a017ab1e3e 100644 --- a/ext/session/php_session.h +++ b/ext/session/php_session.h @@ -35,7 +35,7 @@ #define PS_READ_ARGS void **mod_data, const char *key, char **val, int *vallen #define PS_WRITE_ARGS void **mod_data, const char *key, const char *val, const int vallen #define PS_DESTROY_ARGS void **mod_data, const char *key -#define PS_GC_ARGS void **mod_data, int maxlifetime +#define PS_GC_ARGS void **mod_data, int maxlifetime, int *nrdels typedef struct ps_module_struct { const char *name; diff --git a/ext/session/session.c b/ext/session/session.c index 3a552d21e3..142570a989 100644 --- a/ext/session/session.c +++ b/ext/session/session.c @@ -813,10 +813,15 @@ static void _php_session_start(PSLS_D) _php_session_initialize(PSLS_C); if (PS(mod_data) && PS(gc_probability) > 0) { + int nrdels = -1; + srand(time(NULL)); nrand = (int) (100.0*rand()/RAND_MAX); - if (nrand < PS(gc_probability)) - PS(mod)->gc(&PS(mod_data), PS(gc_maxlifetime)); + if (nrand < PS(gc_probability)) { + PS(mod)->gc(&PS(mod_data), PS(gc_maxlifetime), &nrdels); + if (nrdels != -1) + php_error(E_NOTICE, "Session gc: cleared %d\n", nrdels); + } } } -- 2.50.1