summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/session/mod_mm.c5
-rw-r--r--ext/session/php_session.h2
-rw-r--r--ext/session/session.c9
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);
+ }
}
}