Hi, Thanks for the bug report. Your "uneducated guess" was right.
Could you test the patch in attachment ? Thanks Thierry
0001-BUG-MEDIUM-dead-lock-when-Lua-tasks-are-trigerred.patch
Description: Binary data
> On 2 Jan 2019, at 01:40, Flakebi <[email protected]> wrote: > > Hi, > > I am currently trying to send an http request for some incoming requests to a > logging server. > The incoming connection should be handled independent of the logging, so it > should be possible > that the incoming connection is already closed, while the logging is still in > progress. > > I use lua to create a new http action. This action then registers a task to > decouple the logging. > And the rest happens inside this task. > > As far as I understand the lua api documentation, it should be possible to > call `register_task` [1] > inside an action. However, HAProxy deadlocks when a request comes in. > My uneducated guess would be that HAProxy hangs in a spinlock because it > tries to create a lua context > while still executing lua. > > I tested version 1.8.14 and 1.9.0 and they show the same behaviour. > The lua version is 5.3.5. > > Am I missing something? Should this be possible at all? > > gdb tells the following stacktrace. HAProxy never leaves the hlua_ctx_init > function: > > #0 0x000008eb8d04fd0f in hlua_ctx_init () > #1 0x000008eb8d0533f0 in ?? () > #2 0x00006de619c40d27 in ?? () from /usr/lib/liblua.so.5.3 > #3 0x00006de619c4db85 in ?? () from /usr/lib/liblua.so.5.3 > #4 0x00006de619c403b3 in ?? () from /usr/lib/liblua.so.5.3 > #5 0x00006de619c410a9 in lua_resume () from /usr/lib/liblua.so.5.3 > #6 0x000008eb8d04cf9a in ?? () > #7 0x000008eb8d05197e in ?? () > #8 0x000008eb8d05d037 in http_req_get_intercept_rule () > #9 0x000008eb8d063f96 in http_process_req_common () > #10 0x000008eb8d08f0f1 in process_stream () > #11 0x000008eb8d156b08 in process_runnable_tasks () > #12 0x000008eb8d0d443b in ?? () > #13 0x000008eb8d02b660 in main () > > > haproxy.cfg: > global > lua-load mytest.lua > > listen server > mode http > bind :7999 > http-request lua.test > server s 127.0.0.1:8081 > > > mytest.lua: > function test(txn) > -- This works when commenting out the task creation > core.register_task(function() > core.Warning("Aha") > end) > end > > core.register_action("test", { "http-req" }, test, 0) > > > > Cheers, > Flakebi > > [1] > https://www.arpalert.org/src/haproxy-lua-api/1.8/index.html#core.register_task

