aboutsummaryrefslogtreecommitdiffstats
path: root/openbsc/src
diff options
context:
space:
mode:
authorIvan Kluchnikov <kluchnikovi@gmail.com>2016-11-08 23:56:00 +0300
committerIvan Kluchnikov <kluchnikovi@gmail.com>2017-02-07 18:59:56 +0300
commit084a35588f0249243fa5b8b15575ea777df477e8 (patch)
tree578fc4ecbbbde3a22131cf18e3ff1f45a52c6d65 /openbsc/src
parent03bf40f6a58947b97184e50fcede8ce831d48edd (diff)
reg-proxy: fix osip transactions releasing procedure
* implement nict_trans_free function for checking list of osip_nict_transactions and releasing transactions in terminated state * call nict_trans_free function in main loop * transactions should not be released in message callback functions, so remove osip_transaction_free and osip_message_free from sip_cb_rcv2xx function
Diffstat (limited to 'openbsc/src')
-rw-r--r--openbsc/src/reg-proxy/reg_proxy.c12
-rw-r--r--openbsc/src/reg-proxy/sip.c2
2 files changed, 12 insertions, 2 deletions
diff --git a/openbsc/src/reg-proxy/reg_proxy.c b/openbsc/src/reg-proxy/reg_proxy.c
index 6b3487b30..4c05a89e4 100644
--- a/openbsc/src/reg-proxy/reg_proxy.c
+++ b/openbsc/src/reg-proxy/reg_proxy.c
@@ -209,6 +209,17 @@ void printf_trace_func (char *fi, int li, osip_trace_level_t level, char *chfr,
printf ("\n");
}
+void nict_trans_free(osip_t * osip)
+{
+ int pos = 0;
+ while (!osip_list_eol(&osip->osip_nict_transactions, pos)) {
+ osip_transaction_t *tr = (osip_transaction_t*) osip_list_get(&osip->osip_nict_transactions, pos);
+ if (tr->state== NICT_TERMINATED)
+ osip_transaction_free(tr);
+ else
+ pos++;
+ }
+}
int main(int argc, char **argv)
{
@@ -314,5 +325,6 @@ int main(int argc, char **argv)
osip_timers_ist_execute(reg->osip);
osip_retransmissions_execute(reg->osip);
+ nict_trans_free(reg->osip);
}
}
diff --git a/openbsc/src/reg-proxy/sip.c b/openbsc/src/reg-proxy/sip.c
index 0eac3bd15..adb9c917e 100644
--- a/openbsc/src/reg-proxy/sip.c
+++ b/openbsc/src/reg-proxy/sip.c
@@ -269,14 +269,12 @@ void sip_cb_rcv2xx(int type, osip_transaction_t *tr, osip_message_t *sip_msg)
to = osip_message_get_to(sip_msg);
memcpy(imsi, to->url->username, 16);
- osip_message_free(sip_msg);
printf("OSIP_NICT_STATUS_2XX_RECEIVED imsi = %s \n", imsi);
printf("OSIP_NICT_STATUS_2XX_RECEIVED msisdn = %d \n", msisdn);
printf("OSIP_NICT_STATUS_2XX_RECEIVED msisdn = %s \n", msisdn);
handle_location_update_result(reg->sup_server, imsi, msisdn);
- osip_transaction_free(tr);
}
void sip_cb_rcv2xx_again(int type, osip_transaction_t *pott,osip_message_t *pomt)