diff options
Diffstat (limited to 'platform/src/proxy.cpp')
| -rw-r--r-- | platform/src/proxy.cpp | 32 |
1 files changed, 25 insertions, 7 deletions
diff --git a/platform/src/proxy.cpp b/platform/src/proxy.cpp index 4f1dc2e..0da98c0 100644 --- a/platform/src/proxy.cpp +++ b/platform/src/proxy.cpp @@ -57,7 +57,7 @@ extern struct ssl_policy_enforcer* ssl_policy_enforcer_create(void* logger); extern enum ssl_stream_action ssl_policy_enforce(struct ssl_stream *upstream, void* u_para); -static int signals[] = {SIGHUP, SIGPIPE, SIGUSR1}; +static int signals[] = {SIGHUP, SIGPIPE, SIGUSR1, SIGUSR2}; /* Global Resource */ void * g_default_logger = NULL; @@ -228,8 +228,18 @@ void tfe_proxy_free(tfe_proxy * ctx) static void __dummy_event_handler(evutil_socket_t fd, short what, void * arg) { - //printf("%s alive\n",__FUNCTION__); - return; + struct tfe_thread_ctx *ctx = (struct tfe_thread_ctx *)arg; + struct timespec now; + + clock_gettime(CLOCK_MONOTONIC, &now); + ATOMIC_SET(&(ctx->lastime), now.tv_sec); + TFE_LOG_DEBUG(g_default_logger, "Worker thread %d Update time %lds", ctx->thread_id, now.tv_sec); + + while (ATOMIC_READ(&(ctx->proxy->make_work_thread_sleep)) > 0) + { + TFE_LOG_ERROR(g_default_logger, "recv SIGUSR1, make worker thread %d sleep", ctx->thread_id); + sleep(1); + } } static void __signal_handler_cb(evutil_socket_t fd, short what, void * arg) @@ -243,7 +253,16 @@ static void __signal_handler_cb(evutil_socket_t fd, short what, void * arg) TFE_LOG_ERROR(ctx->logger, "recv SIGHUP, reload zlog.conf"); MESA_handle_runtime_log_reconstruction(NULL); break; - case SIGUSR1: break; + case SIGUSR1: + // enable work thread sleep + TFE_LOG_ERROR(ctx->logger, "recv SIGUSR1, make worker thread sleep"); + ATOMIC_SET(&(ctx->make_work_thread_sleep), 1); + break; + case SIGUSR2: + // disable work thread sleep + TFE_LOG_ERROR(ctx->logger, "recv SIGUSR2, wake worker thread from sleep"); + ATOMIC_ZERO(&(ctx->make_work_thread_sleep)); + break; case SIGPIPE: TFE_PROXY_STAT_INCREASE(STAT_SIGPIPE, 1); TFE_LOG_ERROR(ctx->logger, "Warning: Received SIGPIPE; ignoring.\n"); @@ -269,9 +288,9 @@ static void __gc_handler_cb(evutil_socket_t fd, short what, void * arg) static void * tfe_work_thread(void * arg) { struct tfe_thread_ctx * ctx = (struct tfe_thread_ctx *) arg; - struct timeval timer_delay = {60, 0}; + struct timeval timer_delay = {2, 0}; - struct event * ev = event_new(ctx->evbase, -1, EV_PERSIST, __dummy_event_handler, NULL); + struct event * ev = event_new(ctx->evbase, -1, EV_PERSIST, __dummy_event_handler, ctx); if (unlikely(ev == NULL)) { TFE_LOG_ERROR(g_default_logger, "Failed at creating dummy event for thread %u", ctx->thread_id); @@ -279,7 +298,6 @@ static void * tfe_work_thread(void * arg) } evtimer_add(ev, &timer_delay); - ctx->running = 1; __currect_thread_id = ctx->thread_id; char thread_name[16]; snprintf(thread_name, sizeof(thread_name), "tfe:worker-%d", ctx->thread_id); |
