destroy mailboxes on thread exit
Some checks failed
Build and Deploy / build-linux (push) Failing after 1m42s
Build and Deploy / build-windows (CLANG64) (push) Failing after 10m57s
Build and Deploy / package-dist (push) Has been cancelled
Build and Deploy / deploy-itch (push) Has been cancelled
Build and Deploy / deploy-gitea (push) Has been cancelled

This commit is contained in:
2025-03-13 17:29:42 -05:00
parent 38da997069
commit b1f62cc58c
2 changed files with 31 additions and 2 deletions

View File

@@ -24,6 +24,10 @@ prosperon.dispatch = function(type, data) {
var os = use_embed('os')
var js = use_embed('js')
prosperon.on('exit', _ => {
os.mailbox_destroy(prosperon.id);
})
prosperon.on('SIGINT', function() {
os.exit(1)
})
@@ -851,7 +855,6 @@ function handle_actor_disconnect(id) {
}
function handle_local(msg) {
console.log(`got an arraybuffer of length ${msg.byteLength}`)
handle_message(wota.decode(msg))
}

View File

@@ -7176,7 +7176,7 @@ JSC_CCALL(os_mailbox_push,
if (!buf) return JS_ThrowInternalError(js, "Could not get data from arraybuffer.");
void *data = malloc(size);
void *data = js_malloc_rt(JS_GetRuntime(js), size);
if (!data) return JS_ThrowInternalError(js, "Memory allocation failed.");
memcpy(data,buf,size);
@@ -7248,6 +7248,31 @@ JSC_CCALL(os_mailbox_start,
JS_FreeCString(js, id);
)
JSC_CCALL(os_mailbox_destroy,
if (argc < 1) return JS_ThrowInternalError(js, "Need an actor/mailbox ID to destroy");
const char *id = JS_ToCString(js, argv[0]);
int mailbox_index = shgeti(mailboxes, id);
JS_FreeCString(js, id);
if (mailbox_index != -1) {
mailbox *mb = &mailboxes[mailbox_index].value;
SDL_LockMutex(mb->mutex);
int count = arrlen(mb->messages);
for (int i = 0; i < count; i++)
js_free_rt(JS_GetRuntime(js), mb->messages[i].data);
arrfree(mb->messages);
SDL_UnlockMutex(mb->mutex);
SDL_DestroyMutex(mb->mutex);
SDL_LockMutex(mailboxes_mutex);
shdel(mailboxes, id);
SDL_UnlockMutex(mailboxes_mutex);
}
)
JSC_CCALL(os_waitevent,
SDL_Event event;
double secs;
@@ -7311,6 +7336,7 @@ static const JSCFunctionListEntry js_os_funcs[] = {
MIST_FUNC_DEF(os, mailbox_service, 2),
MIST_FUNC_DEF(os, mailbox_start, 1),
MIST_FUNC_DEF(os, mailbox_exist, 1),
MIST_FUNC_DEF(os, mailbox_destroy, 1),
MIST_FUNC_DEF(os, createthread, 1),
};