aboutsummaryrefslogtreecommitdiff
path: root/src/lib_aux.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib_aux.c')
-rw-r--r--src/lib_aux.c33
1 files changed, 31 insertions, 2 deletions
diff --git a/src/lib_aux.c b/src/lib_aux.c
index b8e56436..7b01693a 100644
--- a/src/lib_aux.c
+++ b/src/lib_aux.c
@@ -21,6 +21,7 @@
21#include "lj_state.h" 21#include "lj_state.h"
22#include "lj_trace.h" 22#include "lj_trace.h"
23#include "lj_lib.h" 23#include "lj_lib.h"
24#include "lj_vmevent.h"
24 25
25#if LJ_TARGET_POSIX 26#if LJ_TARGET_POSIX
26#include <sys/wait.h> 27#include <sys/wait.h>
@@ -318,6 +319,18 @@ static int panic(lua_State *L)
318 return 0; 319 return 0;
319} 320}
320 321
322#ifndef LUAJIT_DISABLE_VMEVENT
323static int error_finalizer(lua_State *L)
324{
325 const char *s = lua_tostring(L, -1);
326 fputs("ERROR in finalizer: ", stderr);
327 fputs(s ? s : "?", stderr);
328 fputc('\n', stderr);
329 fflush(stderr);
330 return 0;
331}
332#endif
333
321#ifdef LUAJIT_USE_SYSMALLOC 334#ifdef LUAJIT_USE_SYSMALLOC
322 335
323#if LJ_64 && !LJ_GC64 && !defined(LUAJIT_USE_VALGRIND) 336#if LJ_64 && !LJ_GC64 && !defined(LUAJIT_USE_VALGRIND)
@@ -339,7 +352,15 @@ static void *mem_alloc(void *ud, void *ptr, size_t osize, size_t nsize)
339LUALIB_API lua_State *luaL_newstate(void) 352LUALIB_API lua_State *luaL_newstate(void)
340{ 353{
341 lua_State *L = lua_newstate(mem_alloc, NULL); 354 lua_State *L = lua_newstate(mem_alloc, NULL);
342 if (L) G(L)->panic = panic; 355 if (L) {
356 G(L)->panic = panic;
357#ifndef LUAJIT_DISABLE_VMEVENT
358 luaL_findtable(L, LUA_REGISTRYINDEX, LJ_VMEVENTS_REGKEY, LJ_VMEVENTS_HSIZE);
359 lua_pushcfunction(L, error_finalizer);
360 lua_rawseti(L, -2, VMEVENT_HASH(LJ_VMEVENT_ERRFIN));
361 G(L)->vmevmask = VMEVENT_MASK(LJ_VMEVENT_ERRFIN);
362#endif
363 }
343 return L; 364 return L;
344} 365}
345 366
@@ -353,7 +374,15 @@ LUALIB_API lua_State *luaL_newstate(void)
353#else 374#else
354 L = lua_newstate(LJ_ALLOCF_INTERNAL, NULL); 375 L = lua_newstate(LJ_ALLOCF_INTERNAL, NULL);
355#endif 376#endif
356 if (L) G(L)->panic = panic; 377 if (L) {
378 G(L)->panic = panic;
379#ifndef LUAJIT_DISABLE_VMEVENT
380 luaL_findtable(L, LUA_REGISTRYINDEX, LJ_VMEVENTS_REGKEY, LJ_VMEVENTS_HSIZE);
381 lua_pushcfunction(L, error_finalizer);
382 lua_rawseti(L, -2, VMEVENT_HASH(LJ_VMEVENT_ERRFIN));
383 G(L)->vmevmask = VMEVENT_MASK(LJ_VMEVENT_ERRFIN);
384#endif
385 }
357 return L; 386 return L;
358} 387}
359 388