MINOR: hlua: add a new hlua_show_current_location() function
This function may be used to try to show where some Lua code is currently being executed. It tries hard to detect the initialization phase, both for the global and the per-thread states, and for runtime states. This intends to be used by error handlers to provide the users with indications about what Lua code was being executed when the error triggered.
This commit is contained in:
parent
5c143404ea
commit
0b7b639d7e
|
@ -54,6 +54,7 @@ int hlua_post_init();
|
||||||
void hlua_applet_tcp_fct(struct appctx *ctx);
|
void hlua_applet_tcp_fct(struct appctx *ctx);
|
||||||
void hlua_applet_http_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);
|
struct task *hlua_process_task(struct task *task, void *context, unsigned int state);
|
||||||
|
const char *hlua_show_current_location(const char *pfx);
|
||||||
|
|
||||||
#else /* USE_LUA */
|
#else /* USE_LUA */
|
||||||
|
|
||||||
|
@ -67,6 +68,7 @@ struct task *hlua_process_task(struct task *task, void *context, unsigned int st
|
||||||
static inline void hlua_init() { }
|
static inline void hlua_init() { }
|
||||||
static inline int hlua_post_init() { return 1; }
|
static inline int hlua_post_init() { return 1; }
|
||||||
static inline void hlua_ctx_destroy(struct hlua *lua) { }
|
static inline void hlua_ctx_destroy(struct hlua *lua) { }
|
||||||
|
static inline const char *hlua_show_current_location(const char *pfx) { return NULL; }
|
||||||
|
|
||||||
#endif /* USE_LUA */
|
#endif /* USE_LUA */
|
||||||
|
|
||||||
|
|
25
src/hlua.c
25
src/hlua.c
|
@ -1124,6 +1124,31 @@ static inline void hlua_sethlua(struct hlua *hlua)
|
||||||
*hlua_store = hlua;
|
*hlua_store = hlua;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Will return a non-NULL string indicating the Lua call trace if the caller
|
||||||
|
* currently is executing from within a Lua function. One line per entry will
|
||||||
|
* be emitted, and each extra line will be prefixed with <pfx>. If a current
|
||||||
|
* Lua function is not detected, NULL is returned.
|
||||||
|
*/
|
||||||
|
const char *hlua_show_current_location(const char *pfx)
|
||||||
|
{
|
||||||
|
lua_State *L;
|
||||||
|
lua_Debug ar;
|
||||||
|
|
||||||
|
/* global or per-thread stack initializing ? */
|
||||||
|
if (hlua_state_id != -1 && (L = hlua_states[hlua_state_id]) && lua_getstack(L, 0, &ar))
|
||||||
|
return hlua_traceback(L, pfx);
|
||||||
|
|
||||||
|
/* per-thread stack running ? */
|
||||||
|
if (hlua_states[tid + 1] && (L = hlua_states[tid + 1]) && lua_getstack(L, 0, &ar))
|
||||||
|
return hlua_traceback(L, pfx);
|
||||||
|
|
||||||
|
/* global stack running ? */
|
||||||
|
if (hlua_states[0] && (L = hlua_states[0]) && lua_getstack(L, 0, &ar))
|
||||||
|
return hlua_traceback(L, pfx);
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
/* This function is used to send logs. It try to send on screen (stderr)
|
/* This function is used to send logs. It try to send on screen (stderr)
|
||||||
* and on the default syslog server.
|
* and on the default syslog server.
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in New Issue