My working unpac space for OCaml projects in development
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

fixed Worker freeing logic (#462)

+22 -2
+22 -2
vendor/git/quickjs-c/quickjs-libc.c
··· 3543 3543 if (port) { 3544 3544 js_free_message_pipe(port->recv_pipe); 3545 3545 JS_FreeValueRT(rt, port->on_message_func); 3546 - list_del(&port->link); 3546 + if (port->link.prev) 3547 + list_del(&port->link); 3547 3548 js_free_rt(rt, port); 3548 3549 } 3549 3550 } ··· 3559 3560 } 3560 3561 } 3561 3562 3563 + static void js_worker_mark(JSRuntime *rt, JSValueConst val, 3564 + JS_MarkFunc *mark_func) 3565 + { 3566 + JSWorkerData *worker = JS_GetOpaque(val, js_worker_class_id); 3567 + if (worker) { 3568 + JSWorkerMessageHandler *port = worker->msg_handler; 3569 + if (port) { 3570 + JS_MarkValue(rt, port->on_message_func, mark_func); 3571 + } 3572 + } 3573 + } 3574 + 3562 3575 static JSClassDef js_worker_class = { 3563 3576 "Worker", 3564 3577 .finalizer = js_worker_finalizer, 3578 + .gc_mark = js_worker_mark, 3565 3579 }; 3566 3580 3567 3581 static void *worker_func(void *opaque) ··· 4139 4153 } 4140 4154 4141 4155 #ifdef USE_WORKER 4142 - /* XXX: free port_list ? */ 4143 4156 js_free_message_pipe(ts->recv_pipe); 4144 4157 js_free_message_pipe(ts->send_pipe); 4158 + 4159 + list_for_each_safe(el, el1, &ts->port_list) { 4160 + JSWorkerMessageHandler *port = list_entry(el, JSWorkerMessageHandler, link); 4161 + /* unlink the message ports. They are freed by the Worker object */ 4162 + port->link.prev = NULL; 4163 + port->link.next = NULL; 4164 + } 4145 4165 #endif 4146 4166 4147 4167 free(ts);