static int get_sip_pvt_from_replaces(const char *callid, const char *totag,
const char *fromtag, struct sip_pvt **out_pvt, struct ast_channel **out_chan)
{
- struct sip_pvt *sip_pvt_ptr;
+ RAII_VAR(struct sip_pvt *, sip_pvt_ptr, NULL, ao2_cleanup);
struct sip_pvt tmp_dialog = {
.callid = callid,
};
}
}
+ /* If we're here sip_pvt_ptr has been copied to *out_pvt, prevent RAII_VAR cleanup */
+ sip_pvt_ptr = NULL;
+
return 0;
}
return NULL;
}
if (!(peer->endpoint = ast_endpoint_create("SIP", name))) {
+ ao2_t_ref(peer, -1, "failed to allocate endpoint, drop peer");
return NULL;
}
if (!(peer->caps = ast_format_cap_alloc(AST_FORMAT_CAP_FLAG_DEFAULT))) {