/*! \brief Hangup a call through the local proxy channel */ static int local_hangup(struct ast_channel *ast) { struct local_pvt *p = ast_channel_tech_pvt(ast); int res; if (!p) { return -1; } /* give the pvt a ref to fulfill calling requirements. */ ao2_ref(p, +1); res = ast_unreal_hangup(&p->base, ast); if (!res) { int unlink; ao2_lock(p); unlink = !p->base.owner && !p->base.chan; ao2_unlock(p); if (unlink) { ao2_unlink(locals, p); } } ao2_ref(p, -1); return res; }
static int media_hangup(struct ast_channel *ast) { struct ast_unreal_pvt *p = ast_channel_tech_pvt(ast); int res; if (!p) { return -1; } /* Give the pvt a ref to fulfill calling requirements. */ ao2_ref(p, +1); res = ast_unreal_hangup(p, ast); ao2_ref(p, -1); return res; }