|
@@ -207,18 +207,37 @@ void term_handler(int s)
|
|
|
}
|
|
|
|
|
|
|
|
|
+static void *purge_thread(void *arg)
|
|
|
+
|
|
|
+{
|
|
|
+ srv_log(xs_dup("purge start"));
|
|
|
+
|
|
|
+ purge_all();
|
|
|
+
|
|
|
+ srv_log(xs_dup("purge end"));
|
|
|
+
|
|
|
+ return NULL;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
static void *queue_thread(void *arg)
|
|
|
|
|
|
{
|
|
|
pthread_mutex_t dummy_mutex = PTHREAD_MUTEX_INITIALIZER;
|
|
|
pthread_cond_t dummy_cond = PTHREAD_COND_INITIALIZER;
|
|
|
+ time_t purge_time;
|
|
|
+
|
|
|
+
|
|
|
+ purge_time = time(NULL) + 15 * 60;
|
|
|
|
|
|
srv_log(xs_fmt("queue thread start"));
|
|
|
|
|
|
while (srv_running) {
|
|
|
xs *list = user_list();
|
|
|
char *p, *uid;
|
|
|
+ time_t t;
|
|
|
|
|
|
+
|
|
|
p = list;
|
|
|
while (xs_list_iter(&p, &uid)) {
|
|
|
snac snac;
|
|
@@ -229,6 +248,16 @@ static void *queue_thread(void *arg)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ if ((t = time(NULL)) > purge_time) {
|
|
|
+ pthread_t pth;
|
|
|
+
|
|
|
+ pthread_create(&pth, NULL, purge_thread, NULL);
|
|
|
+
|
|
|
+
|
|
|
+ purge_time = t + 24 * 60 * 60;
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
struct timespec ts;
|
|
|
clock_gettime(CLOCK_REALTIME, &ts);
|