diff options
author | Ilia Alshanetsky <iliaa@php.net> | 2004-01-12 22:48:58 +0000 |
---|---|---|
committer | Ilia Alshanetsky <iliaa@php.net> | 2004-01-12 22:48:58 +0000 |
commit | 47dddfa4ffeddfa4d4aaa3614279db77d078df99 (patch) | |
tree | 19487e92569f4ba48b5e291dd2ae1cc28bc51980 /ext/sqlite/sess_sqlite.c | |
parent | fad3a6e42f9d9a2b8815fea1e01ff246ba041729 (diff) | |
download | php-git-47dddfa4ffeddfa4d4aaa3614279db77d078df99.tar.gz |
Fixed a bug that would cause the sqlite session database to grow endlessly.
Diffstat (limited to 'ext/sqlite/sess_sqlite.c')
-rw-r--r-- | ext/sqlite/sess_sqlite.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/ext/sqlite/sess_sqlite.c b/ext/sqlite/sess_sqlite.c index 15ab59c54d..86aed96cbd 100644 --- a/ext/sqlite/sess_sqlite.c +++ b/ext/sqlite/sess_sqlite.c @@ -24,6 +24,7 @@ #if HAVE_PHP_SESSION #include "ext/session/php_session.h" +#include "ext/standard/php_lcg.h" #include <sqlite.h> #define SQLITE_RETVAL(__r) ((__r) == SQLITE_OK ? SUCCESS : FAILURE) #define PS_SQLITE_DATA sqlite *db = (sqlite*)PS_GET_MOD_DATA() @@ -173,7 +174,14 @@ PS_GC_FUNC(sqlite) rv = sqlite_exec_printf(db, "DELETE FROM session_data WHERE (%d - updated) > %d", NULL, NULL, NULL, t, maxlifetime); - + + /* because SQLite does not actually clear the deleted data from the database + * we need to occassionaly do so manually to prevent the sessions database + * from endlessly growing. + */ + if ((int) ((float) PS(gc_divisor) * PS(gc_divisor) * php_combined_lcg(TSRMLS_C)) < PS(gc_probability) { + rv = sqlite_exec_printf(db, "VACUUM", NULL, NULL, NULL); + } return SQLITE_RETVAL(rv); } |