From 9089e3b41cefeb20cf504fec51bbb5177aa00304 Mon Sep 17 00:00:00 2001 From: Uros Majstorovic Date: Thu, 9 May 2024 22:41:52 +0200 Subject: added SIGUSR2 signal handler - expires garbage collected connections --- ecp/server/sig.c | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) (limited to 'ecp/server/sig.c') 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 #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; -- cgit v1.2.3