diff --git a/doc/lua-api/index.rst b/doc/lua-api/index.rst index adeec112f..b6b9809e8 100644 --- a/doc/lua-api/index.rst +++ b/doc/lua-api/index.rst @@ -201,6 +201,16 @@ Core class :see: :js:attr:`core.proxies` :see: :js:attr:`core.backends` +.. js:attribute:: core.thread + + **context**: task, action, sample-fetch, converter, applet + + This variable contains the executing thread number starting at 1. 0 is a + special case for the common lua context. So, if thread is 0, Lua scope is + shared by all threads, otherwise the scope is dedicated to a single thread. + A program which needs to execute some parts exactly once regardless of the + number of threads can check that core.thread is 0 or 1. + .. js:function:: core.log(loglevel, msg) **context**: body, init, task, action, sample-fetch, converter diff --git a/src/hlua.c b/src/hlua.c index 34e7403cf..6153ab769 100644 --- a/src/hlua.c +++ b/src/hlua.c @@ -8397,11 +8397,11 @@ static void *hlua_alloc(void *ud, void *ptr, size_t osize, size_t nsize) return ptr; } -/* Ithis function can fail with an abort() due to an Lua critical error. +/* This function can fail with an abort() due to a Lua critical error. * We are in the initialisation process of HAProxy, this abort() is * tolerated. */ -lua_State *hlua_init_state(void) +lua_State *hlua_init_state(int thread_num) { int i; int idx; @@ -8468,6 +8468,9 @@ lua_State *hlua_init_state(void) /* This table entry is the object "core" base. */ lua_newtable(L); + /* set the thread id */ + hlua_class_const_int(L, "thread", thread_num); + /* Push the loglevel constants. */ for (i = 0; i < NB_LOG_LEVELS; i++) hlua_class_const_int(L, log_levels[i], i); @@ -8993,7 +8996,7 @@ lua_State *hlua_init_state(void) } void hlua_init(void) { - gL.T = hlua_init_state(); + gL.T = hlua_init_state(0); } static void hlua_deinit()