Lines Matching refs:ctx
51 proxy_ctx_t *ctx = arg; in proxy_start_reload() local
52 if (pthread_mutex_trylock(&ctx->config_lock) == 0) { in proxy_start_reload()
53 ctx->loading = true; in proxy_start_reload()
54 pthread_cond_signal(&ctx->config_cond); in proxy_start_reload()
55 pthread_mutex_unlock(&ctx->config_lock); in proxy_start_reload()
60 proxy_ctx_t *ctx = arg; in proxy_first_confload() local
61 pthread_mutex_lock(&ctx->config_lock); in proxy_first_confload()
62 ctx->loading = true; in proxy_first_confload()
63 pthread_cond_signal(&ctx->config_cond); in proxy_first_confload()
64 pthread_mutex_unlock(&ctx->config_lock); in proxy_first_confload()
68 pthread_mutex_lock(&ctx->config_lock); in proxy_first_confload()
69 if (!ctx->loading) { in proxy_first_confload()
72 pthread_mutex_unlock(&ctx->config_lock); in proxy_first_confload()
77 STAT_L(ctx); in proxy_first_confload()
78 fails = ctx->global_stats.config_reload_fails; in proxy_first_confload()
79 STAT_UL(ctx); in proxy_first_confload()
89 proxy_ctx_t *ctx = arg; in _proxy_manager_thread() local
92 pthread_mutex_lock(&ctx->manager_lock); in _proxy_manager_thread()
95 while (STAILQ_EMPTY(&ctx->manager_head)) { in _proxy_manager_thread()
96 pthread_cond_wait(&ctx->manager_cond, &ctx->manager_lock); in _proxy_manager_thread()
100 STAILQ_CONCAT(&head, &ctx->manager_head); in _proxy_manager_thread()
101 pthread_mutex_unlock(&ctx->manager_lock); in _proxy_manager_thread()
104 pthread_mutex_lock(&ctx->config_lock); in _proxy_manager_thread()
105 lua_State *L = ctx->proxy_state; in _proxy_manager_thread()
129 pthread_mutex_unlock(&ctx->config_lock); in _proxy_manager_thread()
132 pthread_mutex_lock(&ctx->manager_lock); in _proxy_manager_thread()
143 static void proxy_config_stats_prep(proxy_ctx_t *ctx) { in proxy_config_stats_prep() argument
144 char *oldnamebuf = ctx->user_stats_namebuf; in proxy_config_stats_prep()
145 struct proxy_user_stats_entry *entries = ctx->user_stats; in proxy_config_stats_prep()
148 STAT_L(ctx); in proxy_config_stats_prep()
150 for (int x = 0; x < ctx->user_stats_num; x++) { in proxy_config_stats_prep()
165 for (int x = 0; x < ctx->user_stats_num; x++) { in proxy_config_stats_prep()
199 ctx->user_stats_namebuf = namebuf; in proxy_config_stats_prep()
203 STAT_UL(ctx); in proxy_config_stats_prep()
206 static void proxy_config_reload(proxy_ctx_t *ctx) { in proxy_config_reload() argument
208 STAT_INCR(ctx, config_reloads, 1); in proxy_config_reload()
211 ctx->config_generation++; in proxy_config_reload()
212 lua_State *L = ctx->proxy_state; in proxy_config_reload()
223 if (proxy_load_config(ctx) != 0) { in proxy_config_reload()
225 STAT_INCR(ctx, config_reload_fails, 1); in proxy_config_reload()
230 proxy_config_stats_prep(ctx); in proxy_config_reload()
241 pthread_mutex_lock(&ctx->worker_lock); in proxy_config_reload()
242 ctx->worker_done = false; in proxy_config_reload()
243 ctx->worker_failed = false; in proxy_config_reload()
245 while (!ctx->worker_done) { in proxy_config_reload()
247 pthread_cond_wait(&ctx->worker_cond, &ctx->worker_lock); in proxy_config_reload()
249 pthread_mutex_unlock(&ctx->worker_lock); in proxy_config_reload()
252 if (ctx->worker_failed) { in proxy_config_reload()
253 STAT_INCR(ctx, config_reload_fails, 1); in proxy_config_reload()
261 STAT_L(ctx); in proxy_config_reload()
262 for (int x = 0; x < ctx->user_stats_num; x++) { in proxy_config_reload()
263 ctx->user_stats[x].reset = false; in proxy_config_reload()
265 STAT_UL(ctx); in proxy_config_reload()
267 lua_pop(ctx->proxy_state, 1); // drop config_pools return value in proxy_config_reload()
273 static void proxy_run_crons(proxy_ctx_t *ctx) { in proxy_run_crons() argument
274 lua_State *L = ctx->proxy_state; in proxy_run_crons()
276 assert(ctx->cron_ref); in proxy_run_crons()
280 lua_rawgeti(L, LUA_REGISTRYINDEX, ctx->cron_ref); in proxy_run_crons()
283 if (ctx->cron_next <= now.tv_sec) { in proxy_run_crons()
284 ctx->cron_next = INT_MAX; in proxy_run_crons()
298 if (ctx->config_generation != ce->gen) { in proxy_run_crons()
307 STAT_INCR(ctx, config_cron_runs, 1); in proxy_run_crons()
310 STAT_INCR(ctx, config_cron_fails, 1); in proxy_run_crons()
317 if (ctx->cron_next > ce->next) { in proxy_run_crons()
318 ctx->cron_next = ce->next; in proxy_run_crons()
327 if (ctx->cron_next > ce->next) { in proxy_run_crons()
328 ctx->cron_next = ce->next; in proxy_run_crons()
350 proxy_ctx_t *ctx = arg; in _proxy_config_thread() local
354 pthread_mutex_lock(&ctx->config_lock); in _proxy_config_thread()
355 pthread_cond_signal(&ctx->config_cond); in _proxy_config_thread()
357 ctx->loading = false; in _proxy_config_thread()
360 wait.tv_sec = ctx->cron_next; in _proxy_config_thread()
361 pthread_cond_timedwait(&ctx->config_cond, &ctx->config_lock, &wait); in _proxy_config_thread()
363 proxy_run_crons(ctx); in _proxy_config_thread()
365 if (ctx->loading) { in _proxy_config_thread()
366 proxy_config_reload(ctx); in _proxy_config_thread()
373 int _start_proxy_config_threads(proxy_ctx_t *ctx) { in _start_proxy_config_threads() argument
376 pthread_mutex_lock(&ctx->config_lock); in _start_proxy_config_threads()
377 if ((ret = pthread_create(&ctx->config_tid, NULL, in _start_proxy_config_threads()
378 _proxy_config_thread, ctx)) != 0) { in _start_proxy_config_threads()
381 pthread_mutex_unlock(&ctx->config_lock); in _start_proxy_config_threads()
384 thread_setname(ctx->config_tid, "mc-prx-config"); in _start_proxy_config_threads()
386 pthread_cond_wait(&ctx->config_cond, &ctx->config_lock); in _start_proxy_config_threads()
387 pthread_mutex_unlock(&ctx->config_lock); in _start_proxy_config_threads()
389 pthread_mutex_lock(&ctx->manager_lock); in _start_proxy_config_threads()
390 if ((ret = pthread_create(&ctx->manager_tid, NULL, in _start_proxy_config_threads()
391 _proxy_manager_thread, ctx)) != 0) { in _start_proxy_config_threads()
394 pthread_mutex_unlock(&ctx->manager_lock); in _start_proxy_config_threads()
397 thread_setname(ctx->manager_tid, "mc-prx-manager"); in _start_proxy_config_threads()
398 pthread_mutex_unlock(&ctx->manager_lock); in _start_proxy_config_threads()
406 static int proxy_init_startfiles(proxy_ctx_t *ctx, const char *files) { in proxy_init_startfiles() argument
431 if (ctx->proxy_code == NULL) { in proxy_init_startfiles()
432 ctx->proxy_code = db; in proxy_init_startfiles()
434 struct _mcp_luafile *list = ctx->proxy_code; in proxy_init_startfiles()
447 static int proxy_load_files(proxy_ctx_t *ctx) { in proxy_load_files() argument
448 lua_State *L = ctx->proxy_state; in proxy_load_files()
449 struct _mcp_luafile *db = ctx->proxy_code; in proxy_load_files()
484 proxy_ctx_t *ctx = arg; in proxy_load_config() local
485 lua_State *L = ctx->proxy_state; in proxy_load_config()
488 if (ctx->proxy_code == NULL) { in proxy_load_config()
489 res = proxy_init_startfiles(ctx, settings.proxy_startfile); in proxy_load_config()
496 res = proxy_load_files(ctx); in proxy_load_config()
628 proxy_ctx_t *ctx = arg; in proxy_worker_reload() local
629 pthread_mutex_lock(&ctx->worker_lock); in proxy_worker_reload()
630 if (proxy_thread_loadconf(ctx, thr) != 0) { in proxy_worker_reload()
631 ctx->worker_failed = true; in proxy_worker_reload()
633 ctx->worker_done = true; in proxy_worker_reload()
634 pthread_cond_signal(&ctx->worker_cond); in proxy_worker_reload()
635 pthread_mutex_unlock(&ctx->worker_lock); in proxy_worker_reload()
640 int proxy_thread_loadconf(proxy_ctx_t *ctx, LIBEVENT_THREAD *thr) { in proxy_thread_loadconf() argument
644 struct _mcp_luafile *db = ctx->proxy_code; in proxy_thread_loadconf()
680 _copy_config_table(ctx->proxy_state, L, thr); in proxy_thread_loadconf()
689 STAT_L(ctx); in proxy_thread_loadconf()
690 struct proxy_user_stats_entry *us = ctx->user_stats; in proxy_thread_loadconf()
691 int stats_num = ctx->user_stats_num; in proxy_thread_loadconf()
725 thr->proxy_active_req_limit = ctx->active_req_limit; in proxy_thread_loadconf()
726 STAT_UL(ctx); in proxy_thread_loadconf()
730 thr->proxy_buffer_memory_limit = ctx->buffer_memory_limit; in proxy_thread_loadconf()