summaryrefslogtreecommitdiff
path: root/httpd.c
diff options
context:
space:
mode:
authorGravatar default2022-10-17 11:18:09 +0200
committerGravatar default2022-10-17 11:18:09 +0200
commitc7ff714710f42368b15f7f778c6b8528e045ab77 (patch)
tree1e5abd6b50735acfe27687bc2ad0b47575424147 /httpd.c
parentNew function purge_all(). (diff)
downloadsnac2-c7ff714710f42368b15f7f778c6b8528e045ab77.tar.gz
snac2-c7ff714710f42368b15f7f778c6b8528e045ab77.tar.xz
snac2-c7ff714710f42368b15f7f778c6b8528e045ab77.zip
New thread for purge.
Diffstat (limited to '')
-rw-r--r--httpd.c29
1 files changed, 29 insertions, 0 deletions
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);