MCPcopy Create free account
hub / github.com/apache/trafficserver / vconnHookHandler

Function vconnHookHandler

plugins/lua/ts_lua.cc:605–672  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

603}
604
605static int
606vconnHookHandler(TSCont contp, TSEvent event, void *edata)
607{
608 TSVConn vconn = (TSVConn)edata;
609
610 int ret;
611 uint64_t req_id;
612
613 lua_State *l;
614
615 ts_lua_main_ctx *main_ctx;
616 ts_lua_vconn_ctx *vconn_ctx;
617
618 ts_lua_instance_conf *conf = (ts_lua_instance_conf *)TSContDataGet(contp);
619
620 main_ctx = static_cast<decltype(main_ctx)>(pthread_getspecific(lua_g_state_key));
621 if (main_ctx == NULL) {
622 req_id = __sync_fetch_and_add(&ts_lua_g_http_next_id, 1);
623 Dbg(dbg_ctl, "[%s] req_id for vconn handler: %" PRId64, __FUNCTION__, req_id);
624 main_ctx = &ts_lua_g_main_ctx_array[req_id % conf->states];
625 pthread_setspecific(lua_g_state_key, main_ctx);
626 }
627
628 TSMutexLock(main_ctx->mutexp);
629
630 vconn_ctx = ts_lua_create_vconn_ctx(main_ctx, conf);
631 vconn_ctx->vconn = vconn;
632 l = vconn_ctx->lua;
633
634 switch (event) {
635 case TS_EVENT_VCONN_START:
636 lua_getglobal(l, TS_LUA_FUNCTION_G_VCONN_START);
637 break;
638
639 default:
640 ts_lua_destroy_vconn_ctx(vconn_ctx);
641 TSMutexUnlock(main_ctx->mutexp);
642 TSVConnReenable(vconn);
643 return 0;
644 }
645
646 if (lua_type(l, -1) != LUA_TFUNCTION) {
647 lua_pop(l, 1);
648 ts_lua_destroy_vconn_ctx(vconn_ctx);
649 TSMutexUnlock(main_ctx->mutexp);
650
651 TSVConnReenable(vconn);
652 return 0;
653 }
654
655 if (lua_pcall(l, 0, 1, 0) != 0) {
656 TSError("[ts_lua][%s] lua_pcall failed: %s", __FUNCTION__, lua_tostring(l, -1));
657 }
658
659 ret = lua_tointeger(l, -1);
660 lua_pop(l, 1);
661
662 ts_lua_destroy_vconn_ctx(vconn_ctx);

Callers

nothing calls this directly

Calls 7

TSContDataGetFunction · 0.85
TSMutexLockFunction · 0.85
ts_lua_create_vconn_ctxFunction · 0.85
ts_lua_destroy_vconn_ctxFunction · 0.85
TSMutexUnlockFunction · 0.85
TSVConnReenableFunction · 0.85
TSErrorFunction · 0.50

Tested by

no test coverage detected