diff options
author | Uros Majstorovic <majstor@majstor.org> | 2024-05-09 22:41:52 +0200 |
---|---|---|
committer | Uros Majstorovic <majstor@majstor.org> | 2024-05-09 22:41:52 +0200 |
commit | 9089e3b41cefeb20cf504fec51bbb5177aa00304 (patch) | |
tree | 18db631d18e796beeb52de908a20c624b4e7276c /ecp/server/sig.c | |
parent | bc3f5dc45e19e88a984e215ec5393e86cea84e1c (diff) |
added SIGUSR2 signal handler - expires garbage collected connections
Diffstat (limited to 'ecp/server/sig.c')
-rw-r--r-- | ecp/server/sig.c | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/ecp/server/sig.c b/ecp/server/sig.c index 09593d3..3b83ade 100644 --- a/ecp/server/sig.c +++ b/ecp/server/sig.c @@ -6,20 +6,26 @@ #include <ecp/dir/dir.h> #include "server.h" +#include "dir.h" #include "acl.h" + #include "sig.h" static pthread_t sig_handler_thd; static sigset_t sig_set; +static int conn_expired(ECPConnection *conn, ecp_sts_t now) { + return _ecp_conn_is_zombie(conn, now, CONN_EXPIRE_TO); +} + static void * _sig_handler(void *arg) { - sigset_t *set = arg; + ECPSocket *sock = arg; int rv, sig; while (1) { - rv = sigwait(set, &sig); + rv = sigwait(&sig_set, &sig); if (rv) { - LOG(LOG_ERR, "sig_handler: sigwait err:%d\n", rv); + LOG(LOG_ERR, "sig_handler: sigwait error\n"); continue; } switch (sig) { @@ -32,16 +38,22 @@ static void * _sig_handler(void *arg) { LOG(LOG_DEBUG, "sig_handler: acl reloaded\n"); break; } + + case SIGUSR2: { + ecp_sock_expire(sock, conn_expired); + LOG(LOG_DEBUG, "sig_handler: gc done - inbound connection count:%u\n", ecp_sock_gct_count(sock)); + break; + } } } return NULL; } -int sig_start_handler(void) { +int sig_start_handler(ECPSocket *sock) { int rv; - rv = pthread_create(&sig_handler_thd, NULL, &_sig_handler, (void *)&sig_set); + rv = pthread_create(&sig_handler_thd, NULL, &_sig_handler, sock); if (rv) return ECP_ERR; return ECP_OK; @@ -52,6 +64,7 @@ int sig_init(void) { sigemptyset(&sig_set); sigaddset(&sig_set, SIGUSR1); + sigaddset(&sig_set, SIGUSR2); rv = pthread_sigmask(SIG_BLOCK, &sig_set, NULL); if (rv) return ECP_ERR; |