diff options
author | Ivan Kluchnikov <kluchnikovi@gmail.com> | 2016-11-08 23:56:00 +0300 |
---|---|---|
committer | Ivan Kluchnikov <kluchnikovi@gmail.com> | 2017-02-07 18:59:56 +0300 |
commit | 084a35588f0249243fa5b8b15575ea777df477e8 (patch) | |
tree | 578fc4ecbbbde3a22131cf18e3ff1f45a52c6d65 | |
parent | 03bf40f6a58947b97184e50fcede8ce831d48edd (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
-rw-r--r-- | openbsc/src/reg-proxy/reg_proxy.c | 12 | ||||
-rw-r--r-- | openbsc/src/reg-proxy/sip.c | 2 |
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) |