diff options
| author | 2022-10-17 11:18:09 +0200 | |
|---|---|---|
| committer | 2022-10-17 11:18:09 +0200 | |
| commit | c7ff714710f42368b15f7f778c6b8528e045ab77 (patch) | |
| tree | 1e5abd6b50735acfe27687bc2ad0b47575424147 | |
| parent | New function purge_all(). (diff) | |
| download | snac2-c7ff714710f42368b15f7f778c6b8528e045ab77.tar.gz snac2-c7ff714710f42368b15f7f778c6b8528e045ab77.tar.xz snac2-c7ff714710f42368b15f7f778c6b8528e045ab77.zip | |
New thread for purge.
| -rw-r--r-- | data.c | 4 | ||||
| -rw-r--r-- | httpd.c | 29 |
2 files changed, 29 insertions, 4 deletions
| @@ -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 | } |
| @@ -207,18 +207,37 @@ void term_handler(int s) | |||
| 207 | } | 207 | } |
| 208 | 208 | ||
| 209 | 209 | ||
| 210 | static 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 | |||
| 210 | static void *queue_thread(void *arg) | 223 | static 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); |