summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data.c4
-rw-r--r--httpd.c29
2 files changed, 29 insertions, 4 deletions
diff --git a/data.c b/data.c
index 0d7765c..0d497bf 100644
--- a/data.c
+++ b/data.c
@@ -1064,8 +1064,6 @@ void purge_all(void)
1064 xs *list = user_list(); 1064 xs *list = user_list();
1065 char *p, *uid; 1065 char *p, *uid;
1066 1066
1067 srv_debug(1, xs_fmt("purge start"));
1068
1069 p = list; 1067 p = list;
1070 while (xs_list_iter(&p, &uid)) { 1068 while (xs_list_iter(&p, &uid)) {
1071 if (user_open(&snac, uid)) { 1069 if (user_open(&snac, uid)) {
@@ -1073,6 +1071,4 @@ void purge_all(void)
1073 user_free(&snac); 1071 user_free(&snac);
1074 } 1072 }
1075 } 1073 }
1076
1077 srv_debug(1, xs_fmt("purge end"));
1078} 1074}
diff --git a/httpd.c b/httpd.c
index 4233057..a365b4d 100644
--- a/httpd.c
+++ b/httpd.c
@@ -207,18 +207,37 @@ void term_handler(int s)
207} 207}
208 208
209 209
210static void *purge_thread(void *arg)
211/* spawned purge */
212{
213 srv_log(xs_dup("purge start"));
214
215 purge_all();
216
217 srv_log(xs_dup("purge end"));
218
219 return NULL;
220}
221
222
210static void *queue_thread(void *arg) 223static void *queue_thread(void *arg)
211/* queue thread (queue management) */ 224/* queue thread (queue management) */
212{ 225{
213 pthread_mutex_t dummy_mutex = PTHREAD_MUTEX_INITIALIZER; 226 pthread_mutex_t dummy_mutex = PTHREAD_MUTEX_INITIALIZER;
214 pthread_cond_t dummy_cond = PTHREAD_COND_INITIALIZER; 227 pthread_cond_t dummy_cond = PTHREAD_COND_INITIALIZER;
228 time_t purge_time;
229
230 /* first purge time */
231 purge_time = time(NULL) + 15 * 60;
215 232
216 srv_log(xs_fmt("queue thread start")); 233 srv_log(xs_fmt("queue thread start"));
217 234
218 while (srv_running) { 235 while (srv_running) {
219 xs *list = user_list(); 236 xs *list = user_list();
220 char *p, *uid; 237 char *p, *uid;
238 time_t t;
221 239
240 /* process queues for all users */
222 p = list; 241 p = list;
223 while (xs_list_iter(&p, &uid)) { 242 while (xs_list_iter(&p, &uid)) {
224 snac snac; 243 snac snac;
@@ -229,6 +248,16 @@ static void *queue_thread(void *arg)
229 } 248 }
230 } 249 }
231 250
251 /* time to purge? */
252 if ((t = time(NULL)) > purge_time) {
253 pthread_t pth;
254
255 pthread_create(&pth, NULL, purge_thread, NULL);
256
257 /* next purge time is tomorrow */
258 purge_time = t + 24 * 60 * 60;
259 }
260
232 /* sleep 3 seconds */ 261 /* sleep 3 seconds */
233 struct timespec ts; 262 struct timespec ts;
234 clock_gettime(CLOCK_REALTIME, &ts); 263 clock_gettime(CLOCK_REALTIME, &ts);