Fix crash on exit
This commit is contained in:
parent
bba9c3e90a
commit
c368b81216
1
Makefile
1
Makefile
|
@ -58,6 +58,7 @@ endif
|
|||
|
||||
ifdef LEAK
|
||||
CPPFLAGS += -fsanitize=address -fsanitize=undefined -fno-omit-frame-pointer -DLEAK
|
||||
INFO := $(INFO)_leak
|
||||
endif
|
||||
|
||||
ifeq ($(OPT),small)
|
||||
|
|
|
@ -156,6 +156,7 @@ console.pprint = function(msg,lvl = 0) {
|
|||
|
||||
var file = "nofile";
|
||||
var line = 0;
|
||||
console.rec(0,msg,file,line);
|
||||
|
||||
var caller = (new Error()).stack.split('\n')[2];
|
||||
if (caller) {
|
||||
|
@ -453,12 +454,12 @@ prosperon.touchrelease = function(touches){};
|
|||
prosperon.touchmove = function(touches){};
|
||||
prosperon.clipboardpaste = function(str){};
|
||||
prosperon.quit = function(){
|
||||
console.info(profile.printreport(profcache, "USE REPORT"));
|
||||
console.info(profile.printreport(entityreport, "ENTITY REPORT"));
|
||||
say(profile.printreport(profcache, "USE REPORT"));
|
||||
say(profile.printreport(entityreport, "ENTITY REPORT"));
|
||||
|
||||
console.info("QUITTING");
|
||||
for (var i in debug.log.time)
|
||||
console.warn(debug.log.time[i].map(x=>profile.ms(x)));
|
||||
say(debug.log.time[i].map(x=>profile.ms(x)));
|
||||
};
|
||||
|
||||
global.mixin("scripts/input");
|
||||
|
|
|
@ -101,14 +101,6 @@ JSValue js_getpropidx(JSValue v, uint32_t i)
|
|||
return p;
|
||||
}
|
||||
|
||||
JSValue gos2ref(gameobject **go)
|
||||
{
|
||||
JSValue array = JS_NewArray(js);
|
||||
for (int i = 0; i < arrlen(go); i++)
|
||||
js_setprop_num(array,i,JS_DupValue(js,go[i]->ref));
|
||||
return array;
|
||||
}
|
||||
|
||||
void js_setprop_str(JSValue obj, const char *prop, JSValue v) { JS_SetPropertyStr(js, obj, prop, v); }
|
||||
JSValue js_getpropstr(JSValue v, const char *str)
|
||||
{
|
||||
|
@ -1549,7 +1541,6 @@ void ffi_load() {
|
|||
QJSGLOBALCLASS(dspsound);
|
||||
QJSGLOBALCLASS(pshape);
|
||||
QJSGLOBALCLASS(performance);
|
||||
|
||||
QJSGLOBALCLASS(circle2d);
|
||||
QJSGLOBALCLASS(poly2d);
|
||||
QJSGLOBALCLASS(edge2d);
|
||||
|
@ -1568,7 +1559,3 @@ void ffi_load() {
|
|||
|
||||
JS_FreeValue(js,globalThis);
|
||||
}
|
||||
|
||||
void ffi_stop()
|
||||
{
|
||||
}
|
|
@ -120,7 +120,6 @@ JS_SetClassProto(js, js_##TYPE##_id, TYPE##_proto); \
|
|||
#define countof(x) (sizeof(x)/sizeof((x)[0]))
|
||||
|
||||
void ffi_load();
|
||||
void ffi_stop();
|
||||
|
||||
JSValue vec22js(HMM_Vec2 v);
|
||||
HMM_Vec2 js2vec2(JSValue v);
|
||||
|
|
|
@ -35,17 +35,19 @@ void script_stop()
|
|||
return;
|
||||
#endif
|
||||
printf("FREEING CONTEXT\n");
|
||||
ffi_stop();
|
||||
JS_FreeContext(js);
|
||||
|
||||
script_gc();
|
||||
JS_FreeRuntime(rt);
|
||||
|
||||
JS_FreeContext(js);
|
||||
js = NULL;
|
||||
JS_FreeRuntime(rt);
|
||||
rt = NULL;
|
||||
}
|
||||
|
||||
void script_gc() { JS_RunGC(rt); }
|
||||
|
||||
void js_stacktrace() {
|
||||
if (!js) return;
|
||||
#ifndef NDEBUG
|
||||
script_evalf("console.stack();");
|
||||
#endif
|
||||
|
@ -53,13 +55,19 @@ void js_stacktrace() {
|
|||
|
||||
void script_evalf(const char *format, ...)
|
||||
{
|
||||
char fmtbuf[4096];
|
||||
JSValue obj;
|
||||
va_list args;
|
||||
va_start(args, format);
|
||||
vsnprintf(fmtbuf, 4096, format, args);
|
||||
int len = vsnprintf(NULL, 0, format, args);
|
||||
va_end(args);
|
||||
|
||||
JSValue obj = JS_Eval(js, fmtbuf, strlen(fmtbuf), "C eval", JS_EVAL_FLAGS);
|
||||
char *eval = malloc(len+1);
|
||||
va_start(args, format);
|
||||
vsnprintf(eval, len+1, format, args);
|
||||
va_end(args);
|
||||
|
||||
obj = JS_Eval(js, eval, len, "C eval", JS_EVAL_FLAGS);
|
||||
free(eval);
|
||||
js_print_exception(obj);
|
||||
JS_FreeValue(js,obj);
|
||||
}
|
||||
|
|
16
source/engine/thirdparty/quickjs/quickjs.c
vendored
16
source/engine/thirdparty/quickjs/quickjs.c
vendored
|
@ -114,17 +114,17 @@ void quickjs_set_dumpout(FILE *f)
|
|||
#ifdef DUMP
|
||||
//#define DUMP_FREE
|
||||
#define DUMP_MEM
|
||||
#define DUMP_CLOSURE
|
||||
//#define DUMP_CLOSURE
|
||||
#define DUMP_GC
|
||||
#define DUMP_GC_FREE
|
||||
//#define DUMP_GC_FREE
|
||||
#define DUMP_LEAKS 1
|
||||
#define DUMP_OBJECTS
|
||||
//#define DUMP_OBJECTS
|
||||
#define DUMP_CLOSURE
|
||||
#define DUMP_OBJECTS
|
||||
#define DUMP_ATOMS
|
||||
#define DUMP_SHAPES
|
||||
#define DUMP_MODULE_RESOLVE
|
||||
#define DUMP_PROMISE
|
||||
//#define DUMP_OBJECTS
|
||||
//#define DUMP_ATOMS
|
||||
//#define DUMP_SHAPES
|
||||
//#define DUMP_MODULE_RESOLVE
|
||||
//#define DUMP_PROMISE
|
||||
#endif
|
||||
|
||||
/* test the GC by forcing it before each object allocation */
|
||||
|
|
|
@ -85,6 +85,7 @@ void seghandle()
|
|||
}
|
||||
|
||||
void c_clean() {
|
||||
JS_FreeValue(js, c_process_fn);
|
||||
cleanup();
|
||||
gif_rec_end("out.gif");
|
||||
saudio_shutdown();
|
||||
|
|
Loading…
Reference in a new issue