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

Function ts_lua_fetch_multi_handler

plugins/lua/ts_lua_fetch.cc:517–564  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

515}
516
517static int
518ts_lua_fetch_multi_handler(TSCont contp, TSEvent event ATS_UNUSED, void *edata)
519{
520 int i;
521 lua_State *L;
522 TSMutex lmutex;
523
524 ts_lua_async_item *ai;
525 ts_lua_cont_info *ci;
526 ts_lua_fetch_info *fi;
527 ts_lua_fetch_multi_info *fmi;
528
529 ai = static_cast<decltype(ai)>(TSContDataGet(contp));
530 ci = ai->cinfo;
531
532 fmi = (ts_lua_fetch_multi_info *)ai->data;
533 fi = (ts_lua_fetch_info *)edata;
534
535 L = ai->cinfo->routine.lua;
536 lmutex = ai->cinfo->routine.mctx->mutexp;
537
538 fmi->done++;
539
540 if (fi->fmi != fmi && fmi->done != fmi->total) {
541 return 0;
542 }
543
544 // all finish
545 TSMutexLock(lmutex);
546
547 if (fmi->total == 1 && !fmi->multi) {
548 ts_lua_fill_one_result(L, fi);
549 TSContCall(ci->contp, TSEvent(TS_LUA_EVENT_COROUTINE_CONT), reinterpret_cast<void *>(1));
550
551 } else {
552 lua_newtable(L);
553
554 for (i = 1; i <= fmi->total; i++) {
555 ts_lua_fill_one_result(L, &fmi->fiv[i - 1]);
556 lua_rawseti(L, -2, i);
557 }
558
559 TSContCall(ci->contp, TSEvent(TS_LUA_EVENT_COROUTINE_CONT), reinterpret_cast<void *>(1));
560 }
561
562 TSMutexUnlock(lmutex);
563 return 0;
564}
565
566static inline void
567ts_lua_destroy_fetch_multi_info(ts_lua_fetch_multi_info *fmi)

Callers

nothing calls this directly

Calls 5

TSContDataGetFunction · 0.85
TSMutexLockFunction · 0.85
ts_lua_fill_one_resultFunction · 0.85
TSContCallFunction · 0.85
TSMutexUnlockFunction · 0.85

Tested by

no test coverage detected