diff --git a/src/socket.js.c b/src/socket.js.c index ad517882..f0cec254 100644 --- a/src/socket.js.c +++ b/src/socket.js.c @@ -80,12 +80,24 @@ static void _socket_processOutgoingTls(socket_t* socket); static void _socket_reportTlsErrors(socket_t* socket); static void _socket_reportError(socket_t* socket, const char* error); +static void _socket_gc_mark(JSRuntime* runtime, JSValueConst value, JS_MarkFunc mark_func) +{ + socket_t* socket = JS_GetOpaque(value, _classId); + if (socket) + { + JS_MarkValue(runtime, socket->_onConnect, mark_func); + JS_MarkValue(runtime, socket->_onRead, mark_func); + JS_MarkValue(runtime, socket->_onError, mark_func); + } +} + JSValue tf_socket_register(JSContext* context) { JS_NewClassID(&_classId); JSClassDef def = { .class_name = "Socket", .finalizer = &_socket_finalizer, + .gc_mark = _socket_gc_mark, }; if (JS_NewClass(JS_GetRuntime(context), _classId, &def) != 0) {