diff --git a/include/haproxy/hlua.h b/include/haproxy/hlua.h index 596d096ecf..f139552968 100644 --- a/include/haproxy/hlua.h +++ b/include/haproxy/hlua.h @@ -51,7 +51,6 @@ void hlua_applet_tcp_fct(struct appctx *ctx); void hlua_applet_http_fct(struct appctx *ctx); struct task *hlua_process_task(struct task *task, void *context, unsigned int state); -extern THREAD_LOCAL unsigned int hlua_not_dumpable; #else /* USE_LUA */ /************************ For use when Lua is disabled ********************/ diff --git a/src/debug.c b/src/debug.c index 9346828577..7f004dff50 100644 --- a/src/debug.c +++ b/src/debug.c @@ -264,13 +264,9 @@ void ha_task_dump(struct buffer *buf, const struct task *task, const char *pfx) } if (hlua && hlua->T) { - if (hlua_not_dumpable == 0) { - luaL_traceback(hlua->T, hlua->T, NULL, 0); - if (!append_prefixed_str(buf, lua_tostring(hlua->T, -1), pfx, '\n', 1)) - b_putchr(buf, '\n'); - } - else - chunk_appendf(buf, "Inside non-rentrant part, Stack traceback not available\n"); + chunk_appendf(buf, "stack traceback:\n "); + append_prefixed_str(buf, hlua_traceback(hlua->T, "\n "), pfx, '\n', 0); + b_putchr(buf, '\n'); } else b_putchr(buf, '\n'); diff --git a/src/hlua.c b/src/hlua.c index f3a099e58f..5f93c7c92f 100644 --- a/src/hlua.c +++ b/src/hlua.c @@ -274,9 +274,6 @@ struct hlua_mem_allocator { static struct hlua_mem_allocator hlua_global_allocator THREAD_ALIGNED(64); - /* > 0 if lua is in a non-rentrant part, thus with a non-dumpable stack */ -THREAD_LOCAL unsigned int hlua_not_dumpable = 0; - /* These functions converts types between HAProxy internal args or * sample and LUA types. Another function permits to check if the * LUA stack contains arguments according with an required ARG_T @@ -8635,12 +8632,8 @@ static void *hlua_alloc(void *ud, void *ptr, size_t osize, size_t nsize) /* a limit of ~0 means unlimited and boot complete, so there's no need * for accounting anymore. */ - if (likely(~zone->limit == 0)) { - hlua_not_dumpable++; - ptr = realloc(ptr, nsize); - hlua_not_dumpable--; - return ptr; - } + if (likely(~zone->limit == 0)) + return realloc(ptr, nsize); if (!ptr) osize = 0; @@ -8654,9 +8647,7 @@ static void *hlua_alloc(void *ud, void *ptr, size_t osize, size_t nsize) return NULL; } while (!_HA_ATOMIC_CAS(&zone->allocated, &old, new)); - hlua_not_dumpable++; ptr = realloc(ptr, nsize); - hlua_not_dumpable--; if (unlikely(!ptr && nsize)) // failed _HA_ATOMIC_SUB(&zone->allocated, nsize - osize);