<div dir="ltr"><div dir="ltr" class="gmail_msg">Hi. I started implementing a JavaScriptCore GObject binding in [1]. This API provides two main objects: JSCContext, representing JSGlobalContextRef, and JSCValue, representing JSValueRef. It&#39;s a first patch and does&#39;t do any memory management, because I wasn&#39;t really aware of how JSC handles JSValueRefs and stuff.<div class="gmail_msg"><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">Asking on JSC list they replied that JSValues are garbage collected and when you need to keep a reference to it in the heap you should protect them. [2]<span class="m_7513712684517898107inbox-inbox-Apple-converted-space gmail_msg"> </span>This is already done by the bindings: JSValueRefs are protected on contruction of JSCValue and unprotected on destruction, but JSCValues were implemented as initially owned and noone&#39;s keeping their reference to unref them when needed.</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">So in the current state, we are leaking JSCValues and, as JSCValues protect JSValueRefs, memory is never freed.</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">JavaScriptCore doesn&#39;t have any API to directly free JSValueRefs, so JSCValues needs to be destructed to unprotect JSValueRefs.</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">My thought is to Adopt JSCValues when they are created using a private API in the JSCContext (jscContextAdoptJSCValue(JSCValue*) ?). As JSCValues have a JSCContext reference, we can call jscContextAdoptJSCValue in JSCValue&#39;s constructed callback. With this private API, JSCContext will get a JSCValue reference and add it to a HashMap that will map the JSValueRef to the JSCValue. When added to the HashMap, JSCValue will be owned by the context and will be freed when the context is unrefed.</div></div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">What do you think about this idea?</div><div class="gmail_msg"><br></div><div class="gmail_msg">[1] <font color="#3367d6"><u><a href="https://bugs.webkit.org/show_bug.cgi?id=164061">https://bugs.webkit.org/show_bug.cgi?id=164061</a></u></font></div><div class="gmail_msg">[2] <a href="https://lists.webkit.org/pipermail/jsc-dev/2016-November/000084.html" class="gmail_msg" target="_blank">https://lists.webkit.org/pipermail/jsc-dev/2016-November/000084.html</a></div></div></div>