void jsd_DropValue(JSDContext* jsdc, JSDValue* jsdval) { JSCrossCompartmentCall *call = NULL; JS_ASSERT(jsdval->nref > 0); if(0 == --jsdval->nref) { jsd_RefreshValue(jsdc, jsdval); if(JSVAL_IS_GCTHING(jsdval->val)) { JS_BeginRequest(jsdc->dumbContext); call = JS_EnterCrossCompartmentCall(jsdc->dumbContext, jsdc->glob); if(!call) { JS_EndRequest(jsdc->dumbContext); return; } JS_RemoveValueRoot(jsdc->dumbContext, &jsdval->val); JS_LeaveCrossCompartmentCall(call); JS_EndRequest(jsdc->dumbContext); } free(jsdval); } }
void jsd_DropValue(JSDContext* jsdc, JSDValue* jsdval) { JS_ASSERT(jsdval->nref > 0); if(0 == --jsdval->nref) { jsd_RefreshValue(jsdc, jsdval); if(JSVAL_IS_GCTHING(jsdval->val)) { JS_BeginRequest(jsdc->dumbContext); JS_RemoveRoot(jsdc->dumbContext, &jsdval->val); JS_EndRequest(jsdc->dumbContext); } free(jsdval); } }
void jsd_DropValue(JSDContext* jsdc, JSDValue* jsdval) { JSCompartment* oldCompartment = NULL; JS_ASSERT(jsdval->nref > 0); if(0 == --jsdval->nref) { jsd_RefreshValue(jsdc, jsdval); if(JSVAL_IS_GCTHING(jsdval->val)) { JS_BeginRequest(jsdc->dumbContext); oldCompartment = JS_EnterCompartment(jsdc->dumbContext, jsdc->glob); JS_RemoveValueRoot(jsdc->dumbContext, &jsdval->val); JS_LeaveCompartment(jsdc->dumbContext, oldCompartment); JS_EndRequest(jsdc->dumbContext); } free(jsdval); } }
JSD_RefreshValue(JSDContext* jsdc, JSDValue* jsdval) { JSD_ASSERT_VALID_CONTEXT(jsdc); JSD_ASSERT_VALID_VALUE(jsdval); jsd_RefreshValue(jsdc, jsdval); }