Esempio n. 1
0
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);
}
Esempio n. 2
0
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;
}
Esempio n. 3
0
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);
}
Esempio n. 4
0
File: glw.c Progetto: Allba/showtime
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);
}
Esempio n. 5
0
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);
}
Esempio n. 6
0
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);
}
Esempio n. 7
0
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;
}
Esempio n. 8
0
File: js.c Progetto: Daisho/showtime
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();
}