#include #include #include #include #include #include "server.h" #include "acl.h" #include "sig.h" static pthread_t sig_handler_thd; static sigset_t sig_set; static void * _sig_handler(void *arg) { sigset_t *set = arg; int rv, sig; while (1) { rv = sigwait(set, &sig); if (rv) { LOG(LOG_ERR, "sig_handler: sigwait err:%d\n", rv); continue; } switch (sig) { case SIGUSR1: { rv = acl_load(); if (rv) { LOG(LOG_ERR, "sig_handler: acl load err:%d\n", rv); continue; } LOG(LOG_DEBUG, "sig_handler: acl reloaded\n"); break; } } } return NULL; } int sig_start_handler(void) { int rv; rv = pthread_create(&sig_handler_thd, NULL, &_sig_handler, (void *)&sig_set); if (rv) return ECP_ERR; return ECP_OK; } int sig_init(void) { int rv; sigemptyset(&sig_set); sigaddset(&sig_set, SIGUSR1); rv = pthread_sigmask(SIG_BLOCK, &sig_set, NULL); if (rv) return ECP_ERR; return ECP_OK; }