static void js_model_destroy(js_model_t *jm) { assert(TAILQ_FIRST(&jm->jm_items) == NULL); if(jm->jm_args) strvec_free(jm->jm_args); prop_unsubscribe(jm->jm_eventsub); if(jm->jm_root) prop_ref_dec(jm->jm_root); if(jm->jm_loading) prop_ref_dec(jm->jm_loading); if(jm->jm_nodes) prop_ref_dec(jm->jm_nodes); if(jm->jm_actions) prop_ref_dec(jm->jm_actions); if(jm->jm_type) prop_ref_dec(jm->jm_type); if(jm->jm_error) prop_ref_dec(jm->jm_error); if(jm->jm_contents) prop_ref_dec(jm->jm_contents); if(jm->jm_entries) prop_ref_dec(jm->jm_entries); if(jm->jm_source) prop_ref_dec(jm->jm_source); if(jm->jm_metadata) prop_ref_dec(jm->jm_metadata); if(jm->jm_options) prop_ref_dec(jm->jm_options); if(jm->jm_eventsink) prop_ref_dec(jm->jm_eventsink); if(jm->jm_pc != NULL) prop_courier_destroy(jm->jm_pc); free(jm->jm_url); hts_mutex_lock(&js_model_mutex); LIST_REMOVE(jm, jm_link); hts_mutex_unlock(&js_model_mutex); free(jm); }
event_t * popup_display(prop_t *p) { prop_courier_t *pc = prop_courier_create_waitable(); event_t *e = NULL; prop_t *r = prop_create(p, "eventSink"); prop_sub_t *s = prop_subscribe(PROP_SUB_TRACK_DESTROY, PROP_TAG_CALLBACK, eventsink, &e, PROP_TAG_ROOT, r, PROP_TAG_COURIER, pc, NULL); /* Will show the popup */ if(prop_set_parent(p, prop_create(prop_get_global(), "popups"))) { /* popuproot is a zombie, this is an error */ abort(); } while(e == NULL) prop_courier_wait_and_dispatch(pc); prop_unsubscribe(s); prop_courier_destroy(pc); return e; }
static void js_model_destroy(js_model_t *jm) { if(jm->jm_args) strvec_free(jm->jm_args); prop_unsubscribe(jm->jm_eventsub); if(jm->jm_root) prop_ref_dec(jm->jm_root); if(jm->jm_loading) prop_ref_dec(jm->jm_loading); if(jm->jm_nodes) prop_ref_dec(jm->jm_nodes); if(jm->jm_actions) prop_ref_dec(jm->jm_actions); if(jm->jm_type) prop_ref_dec(jm->jm_type); if(jm->jm_error) prop_ref_dec(jm->jm_error); if(jm->jm_contents) prop_ref_dec(jm->jm_contents); if(jm->jm_entries) prop_ref_dec(jm->jm_entries); if(jm->jm_source) prop_ref_dec(jm->jm_source); if(jm->jm_metadata) prop_ref_dec(jm->jm_metadata); if(jm->jm_options) prop_ref_dec(jm->jm_options); if(jm->jm_eventsink) prop_ref_dec(jm->jm_eventsink); if(jm->jm_pc != NULL) prop_courier_destroy(jm->jm_pc); free(jm->jm_url); free(jm); }
void glw_fini(glw_root_t *gr) { glw_text_bitmap_fini(gr); rstr_release(gr->gr_default_font); glw_tex_fini(gr); free(gr->gr_skin); glw_fini_settings(gr); pool_destroy(gr->gr_token_pool); pool_destroy(gr->gr_clone_pool); prop_courier_destroy(gr->gr_courier); hts_mutex_destroy(&gr->gr_mutex); }
void glw_fini(glw_root_t *gr) { if(gr->gr_osk_widget != NULL) { glw_unref(gr->gr_osk_widget); prop_unsubscribe(gr->gr_osk_text_sub); prop_unsubscribe(gr->gr_osk_ev_sub); } glw_text_bitmap_fini(gr); rstr_release(gr->gr_default_font); glw_tex_fini(gr); free(gr->gr_skin); prop_unsubscribe(gr->gr_evsub); pool_destroy(gr->gr_token_pool); pool_destroy(gr->gr_clone_pool); prop_courier_destroy(gr->gr_courier); hts_mutex_destroy(&gr->gr_mutex); }
static void fa_search_destroy (fa_search_t *fas) { free(fas->fas_query); prop_unsubscribe(fas->fas_sub); if (fas->fas_pc) prop_courier_destroy(fas->fas_pc); if (fas->fas_nodes) prop_ref_dec(fas->fas_nodes); /* FIXME: We should wrap our own popen2() to get the pid * of the child process so we can kill it. * popen() simply waits for the process to finish, which * could be quite some time for Mr locate. */ if (fas->fas_fp) pclose(fas->fas_fp); free(fas); }
JSBool js_wait_for_value(JSContext *cx, prop_t *root, const char *subname, jsval value, jsval *rval) { prop_courier_t *pc = prop_courier_create_waitable(); prop_sub_t *s; wfv_t wfv; wfv.value = value; wfv.done = 0; s = prop_subscribe(0, PROP_TAG_ROOT, root, PROP_TAG_COURIER, pc, PROP_TAG_CALLBACK, vfw_setval, &wfv, PROP_TAG_NAMESTR, subname, NULL); if(s == NULL) { JS_ReportError(cx, "Unable to subscribe to %s", subname); return JS_FALSE; } *rval = JSVAL_TRUE; while(!wfv.done) { struct prop_notify_queue exp, nor; jsrefcount s = JS_SuspendRequest(cx); prop_courier_wait(pc, &nor, &exp); JS_ResumeRequest(cx, s); prop_notify_dispatch(&exp); prop_notify_dispatch(&nor); } prop_unsubscribe(s); prop_courier_destroy(pc); return JS_TRUE; }
static void js_fini(void) { js_plugin_t *jsp, *n; JSContext *cx = js_global_cx; prop_courier_destroy(js_global_pc); JS_SetContextThread(cx); JS_BeginRequest(cx); for(jsp = LIST_FIRST(&js_plugins); jsp != NULL; jsp = n) { n = LIST_NEXT(jsp, jsp_link); js_plugin_unload0(cx, jsp); } JS_RemoveRoot(cx, &showtimeobj); JS_EndRequest(cx); JS_GC(cx); JS_DestroyContext(cx); JS_DestroyRuntime(runtime); JS_ShutDown(); }