summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Eversberg <jolly@eversberg.eu>2021-01-25 08:51:48 +0100
committerAndreas Eversberg <jolly@eversberg.eu>2021-01-25 08:51:48 +0100
commiteb48c349c64433dd4d95dd5a185d74c390924474 (patch)
treed81b32280c1029122c729173943e1754fd82b94f
parent345d953ab69ca73906cfe52e3e76c56bbb245ef1 (diff)
Fixed memory leak, caused by not freeing saved events
-rw-r--r--src/sip/sip.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/sip/sip.c b/src/sip/sip.c
index 49ce49c..3721034 100644
--- a/src/sip/sip.c
+++ b/src/sip/sip.c
@@ -41,6 +41,8 @@
#undef NUTAG_AUTO100
+#define NUTAG_WITH_THIS_MSG(msg) nutag_with, tag_ptr_v(msg)
+
static void invite_option_timeout(struct timer *timer);
call_t *call_create(sip_endpoint_t *sip_ep)
@@ -856,7 +858,6 @@ static void ep_i_register(sip_endpoint_t *sip_ep, int status, nua_t *nua, nua_ha
{
PDEBUG(DSIP, DEBUG_INFO, "Received REGISTER (registration)\n");
- #define NUTAG_WITH_THIS_MSG(msg) nutag_with, tag_ptr_v(msg)
nua_saved_event_t saved[1];
nua_save_event(nua, saved);
nua_event_data_t const *data = nua_event_data(saved);
@@ -878,6 +879,7 @@ static void ep_i_register(sip_endpoint_t *sip_ep, int status, nua_t *nua, nua_ha
PDEBUG(DSIP, DEBUG_DEBUG, "forbidden, because we don't accept registration");
PDEBUG(DSIP, DEBUG_INFO, "Sending REGISTER response: %d %s (registration)\n", SIP_403_FORBIDDEN);
nua_respond(nh, SIP_403_FORBIDDEN, NUTAG_WITH_THIS_MSG(data->e_msg), TAG_END());
+ nua_destroy_event(saved);
PDEBUG(DSIP, DEBUG_DEBUG, "destroying nua_handle %p (register)\n", nh);
nua_handle_destroy(nh);
sip_ep->register_handle = NULL;
@@ -909,6 +911,7 @@ static void ep_i_register(sip_endpoint_t *sip_ep, int status, nua_t *nua, nua_ha
PDEBUG(DSIP, DEBUG_INFO, "Sending REGISTER response: %d %s (registration)\n", status, auth_text);
nua_respond(nh, status, auth_text, SIPTAG_CONTACT(sip->sip_contact), NUTAG_WITH_THIS_MSG(data->e_msg), TAG_IF(auth_str[0], SIPTAG_WWW_AUTHENTICATE_STR(auth_str)), TAG_END());
+ nua_destroy_event(saved);
PDEBUG(DSIP, DEBUG_DEBUG, "destroying nua_handle %p (register)\n", nh);
nua_handle_destroy(nh);
sip_ep->register_handle = NULL;
@@ -967,7 +970,6 @@ static void ep_i_options(nua_t *nua, nua_handle_t *nh)
{
PDEBUG(DSIP, DEBUG_INFO, "Received OPTIONS (registration)\n");
- #define NUTAG_WITH_THIS_MSG(msg) nutag_with, tag_ptr_v(msg)
nua_saved_event_t saved[1];
nua_save_event(nua, saved);
nua_event_data_t const *data = nua_event_data(saved);
@@ -975,6 +977,9 @@ static void ep_i_options(nua_t *nua, nua_handle_t *nh)
PDEBUG(DSIP, DEBUG_INFO, "Sending OPTIONS response: %d %s (registration)\n", SIP_200_OK);
nua_respond(nh, SIP_200_OK, NUTAG_WITH_THIS_MSG(data->e_msg), TAG_END());
+ nua_destroy_event(saved);
+
+ // NOTE: nh will be destroyed by caller of this function
}
static void ep_r_options(sip_endpoint_t __attribute__((unused)) *sip_ep, int status, char const *phrase, nua_handle_t __attribute__((unused)) *nh)
@@ -1276,7 +1281,6 @@ static void call_i_info(call_t *call, nua_t *nua, nua_handle_t *nh, sip_t const
char digit = '\0';
osmo_cc_msg_t *msg;
- #define NUTAG_WITH_THIS_MSG(msg) nutag_with, tag_ptr_v(msg)
nua_saved_event_t saved[1];
nua_save_event(nua, saved);
nua_event_data_t const *data = nua_event_data(saved);
@@ -1316,6 +1320,7 @@ static void call_i_info(call_t *call, nua_t *nua, nua_handle_t *nh, sip_t const
PDEBUG(DSIP, DEBUG_INFO, "Sending INFO response: %d %s (callref %d)\n", SIP_200_OK, call->cc_callref);
nua_respond(nh, SIP_200_OK, NUTAG_WITH_THIS_MSG(data->e_msg), TAG_END());
+ nua_destroy_event(saved);
if (digit) {
char digits[2] = { digit, '\0' };