コード例 #1
0
ファイル: es_faprovider.c プロジェクト: Ezio-PS/movian
static void
es_fa_close(void *aux)
{
  es_fa_handle_t *fah = aux;
  es_fap_t *ef = fah->fah_ef;
  es_context_t *ec = ef->super.er_ctx;
  duk_context *ctx = ec->ec_duk;

  es_context_begin(ec);

  es_push_root(ctx, ef);
  duk_get_prop_string(ctx, -1, "close");
  es_push_native_obj(ctx, &es_native_fah, fah_retain(fah));
  es_push_root(ctx, fah);

  int rc = duk_pcall(ctx, 2);

  if(rc) {
    fah_exception(fah, ctx);
    es_dump_err(ctx);
  }

  es_root_unregister(ctx, fah);
  es_context_end(ec, 1);
  fah_release(fah);
}
コード例 #2
0
ファイル: es_faprovider.c プロジェクト: Ezio-PS/movian
static void
es_fap_destroy(es_resource_t *eres)
{
  es_fap_t *ef = (es_fap_t *)eres;
  fileaccess_unregister_dynamic(&ef->fap);
  free(ef->name);
  es_root_unregister(eres->er_ctx->ec_duk, eres);
  es_resource_unlink(&ef->super);
}
コード例 #3
0
ファイル: es_timer.c プロジェクト: Ralbarker/showtime
static void
es_timer_destroy(es_resource_t *eres)
{
  es_timer_t *et = (es_timer_t *)eres;

  es_root_unregister(eres->er_ctx->ec_duk, eres);

  if(et->et_expire) {
    hts_mutex_lock(&timer_mutex);
    LIST_REMOVE(et, et_link);
    hts_mutex_unlock(&timer_mutex);
  }

  es_resource_unlink(&et->super);
}
コード例 #4
0
ファイル: es_route.c プロジェクト: Overx/showtime
static void
es_route_destroy(es_resource_t *eres)
{
  es_route_t *er = (es_route_t *)eres;

  es_root_unregister(eres->er_ctx->ec_duk, eres);

  hts_mutex_lock(&route_mutex);
  LIST_REMOVE(er, er_link);
  hts_mutex_unlock(&route_mutex);

  free(er->er_pattern);
  hts_regfree(&er->er_regex);

  es_resource_unlink(&er->super);
}
コード例 #5
0
ファイル: es_faprovider.c プロジェクト: Ezio-PS/movian
static int
es_fap_read(fa_handle_t *fh, void *buf, size_t size)
{
  es_fa_handle_t *fah = (es_fa_handle_t *)fh;
  fah->fah_readbuf = buf;
  fah->fah_readlen = size;

  hts_mutex_lock(&es_fa_mutex);
  fah->fah_status = ES_FA_WORKING;

  task_run(es_fa_read, fah_retain(fah));

  while(fah->fah_status == ES_FA_WORKING)
    hts_cond_wait(&es_fa_cond, &es_fa_mutex);

  hts_mutex_unlock(&es_fa_mutex);

  es_fap_t *ef = fah->fah_ef;
  es_context_t *ec = ef->super.er_ctx;
  duk_context *ctx = ec->ec_duk;

  es_context_begin(ec);
  es_push_root(ctx, fah->fah_readbuf);
  duk_config_buffer(ctx, -1, NULL, 0);
  es_root_unregister(ctx, fah->fah_readbuf);
  es_context_end(ec, 0);


  switch(fah->fah_status) {
  case ES_FA_OK:
    fah->fah_fpos += fah->fah_return_value;
    return fah->fah_return_value;

  case ES_FA_CANCELLED:
  case ES_FA_ERROR:
    return -1;
  }
  return 0;
}