From 4060c80469a705c5b2375e4509710be233d56126 Mon Sep 17 00:00:00 2001 From: Nikos Mavrogiannopoulos Date: Sun, 10 Feb 2013 13:50:56 +0100 Subject: [PATCH] fork moved to gdbm backend expiration --- src/cookies-gdbm.c | 52 +++++++++++++++++++++++++++------------------- src/main.c | 14 ++----------- 2 files changed, 33 insertions(+), 33 deletions(-) diff --git a/src/cookies-gdbm.c b/src/cookies-gdbm.c index b4da0e88..c70af137 100644 --- a/src/cookies-gdbm.c +++ b/src/cookies-gdbm.c @@ -32,7 +32,7 @@ #include #include #include - +#include "setproctitle.h" #include #include @@ -115,36 +115,46 @@ datum data; int deleted = 0; struct stored_cookie_st sc; time_t now = time(0); +pid_t pid; - dbf = gdbm_open((char*)s->config->cookie_db_name, 0, GDBM_WRITER, 0, NULL); - if (dbf == NULL) - return; + pid = fork(); + if (pid == 0) { /* child */ + clear_lists(s); + setproctitle(PACKAGE_NAME"-maint"); - key = gdbm_firstkey(dbf); - if (key.dptr == NULL) - goto finish; + dbf = gdbm_open((char*)s->config->cookie_db_name, 0, GDBM_WRITER, 0, NULL); + if (dbf == NULL) + exit(1); - while(key.dptr != NULL) { - data = gdbm_fetch( dbf, key); - if (data.dsize != sizeof(sc)) { - gdbm_delete(dbf, key); - deleted++; - } else { - memcpy(&sc, data.dptr, data.dsize); - if (sc.expiration <= now) { + key = gdbm_firstkey(dbf); + if (key.dptr == NULL) + goto finish; + + while(key.dptr != NULL) { + data = gdbm_fetch( dbf, key); + if (data.dsize != sizeof(sc)) { gdbm_delete(dbf, key); deleted++; + } else { + memcpy(&sc, data.dptr, data.dsize); + if (sc.expiration <= now) { + gdbm_delete(dbf, key); + deleted++; + } } - } - key = gdbm_nextkey(dbf, key); - } + key = gdbm_nextkey(dbf, key); + } - if (deleted > 0) - gdbm_reorganize(dbf); + if (deleted > 0) + gdbm_reorganize(dbf); finish: - gdbm_close(dbf); + gdbm_close(dbf); + exit(0); + } + + return; } static diff --git a/src/main.c b/src/main.c index 1063d1d9..d3bdb27b 100644 --- a/src/main.c +++ b/src/main.c @@ -691,18 +691,8 @@ fork_failed: need_maintainance = 0; mslog(&s, NULL, LOG_INFO, "Performing maintainance"); expire_tls_sessions(&s); - - if (s.config->cookie_db_name != NULL) { /* gdbm */ - pid = fork(); - if (pid == 0) { /* child */ - clear_lists(&s); - setproctitle(PACKAGE_NAME"-maint"); - expire_cookies(&s); - exit(0); - } - } else { /* hash */ - expire_cookies(&s); - } + expire_cookies(&s); + alarm(MAINTAINANCE_TIME); }