static inline void free_acc_ctx(acc_ctx_t* ctx) { int i; str ctxstr; struct dlg_cell *dlg; if (ctx->extra_values) free_extra_array(ctx->extra_values, extra_tgs_len); if (ctx->leg_values) { for (i=0; i<ctx->legs_no; i++) { free_extra_array(ctx->leg_values[i], leg_tgs_len); } shm_free(ctx->leg_values); } if (ctx->acc_table.s) shm_free(ctx->acc_table.s); shm_free(ctx); /* also cleanup dialog */ ctx = 0; ctxstr.len = sizeof(ctx); ctxstr.s = (char *)&ctx; dlg = dlg_api.get_dlg ? dlg_api.get_dlg() : NULL; if (dlg && dlg_api.store_dlg_value(dlg, &acc_ctx_str, &ctxstr) < 0) LM_ERR("cannot reset context in dialog %p!\n", dlg); }
static inline void free_acc_ctx(acc_ctx_t* ctx) { int i; if (ctx->extra_values) free_extra_array(extra_tags, extra_tgs_len, ctx->extra_values); if (ctx->leg_values) { for (i=0; i<ctx->legs_no; i++) { free_extra_array(leg_tags, leg_tgs_len, ctx->leg_values[i]); } shm_free(ctx->leg_values); } if (ctx->acc_table.s) shm_free(ctx->acc_table.s); shm_free(ctx); }