示例#1
0
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);
}
示例#2
0
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);
}