예제 #1
0
void
mrb_irep_decref(MemManager &mrb, mrb_irep *irep)
{
    irep->refcnt--;
    if (irep->refcnt == 0) {
        mrb_irep_free(mrb, irep);
    }
}
예제 #2
0
파일: state.c 프로젝트: Ancurio/mruby
void
mrb_irep_decref(mrb_state *mrb, mrb_irep *irep)
{
  irep->refcnt--;
  if (irep->refcnt == 0) {
    mrb_irep_free(mrb, irep);
  }
}
예제 #3
0
static void ngx_mrb_irep_clean(ngx_http_request_t *r, ngx_mrb_state_t *state, ngx_mrb_code_t *code)
{
    int i;
    int last_idx = state->mrb->irep_len;
    state->mrb->irep_len = code->n;
    for (i = code->n; i < last_idx; i++) {
        ngx_log_error(NGX_LOG_INFO
            , r->connection->log
            , 0
            , "%s INFO %s:%d: irep cleaning idx=[%d]"
            , MODULE_NAME
            , __func__
            , __LINE__
            , i
        );
        mrb_irep_free(state->mrb, state->mrb->irep[i]);
    }
}
예제 #4
0
void
mrb_close(mrb_state *mrb)
{
  size_t i;

  mrb_final_core(mrb);

  /* free */
  mrb_gc_free_gv(mrb);
  for (i=0; i<mrb->irep_len; i++) {
    mrb_irep_free(mrb, mrb->irep[i]);
  }
  mrb_free(mrb, mrb->irep);
  mrb_free_context(mrb, mrb->root_c);
  mrb_free_symtbl(mrb);
  mrb_free_heap(mrb);
  mrb_alloca_free(mrb);
  mrb_free(mrb, mrb);
}
예제 #5
0
//
// run mruby core functions
//
static void ap_mruby_irep_clean(mrb_state *mrb, struct mrb_irep *irep, request_rec *r)
{
    TRACER;
    mrb_irep_free(mrb, irep);
}
예제 #6
0
static void ngx_mrb_irep_clean(ngx_mrb_state_t *state)
{
    state->mrb->irep_len = state->n;
    mrb_irep_free(state->mrb, state->mrb->irep[state->n]);
    state->mrb->exc = 0;
}
static void ngx_http_mruby_irep_clean(ngx_http_mruby_state_t *state, ngx_http_mruby_code_t *code)
{
    mrb_irep_free(state->mrb, code->proc->body.irep);
    state->mrb->exc = 0;
}