Fix crash on exit

This commit is contained in:
John Alanbrook 2024-04-16 07:48:34 -05:00
parent bba9c3e90a
commit c368b81216
8 changed files with 31 additions and 34 deletions

View file

@ -58,6 +58,7 @@ endif
ifdef LEAK
CPPFLAGS += -fsanitize=address -fsanitize=undefined -fno-omit-frame-pointer -DLEAK
INFO := $(INFO)_leak
endif
ifeq ($(OPT),small)

View file

@ -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");

View file

@ -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()
{
}

View file

@ -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);

View file

@ -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);
}

View file

@ -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 */

View file

@ -85,6 +85,7 @@ void seghandle()
}
void c_clean() {
JS_FreeValue(js, c_process_fn);
cleanup();
gif_rec_end("out.gif");
saudio_shutdown();