From 200f56e995563c4af6fcd083b9dd4cab15632440 Mon Sep 17 00:00:00 2001 From: Neels Hofmeyr Date: Tue, 17 Oct 2017 01:46:04 +0200 Subject: add lu_op_free(), use in luop.c Add to luop.h, it will be used in db_hlr.c in an upcoming patch. Change-Id: Ib44d9062edc957d2e0710b7e485604f97e4d5612 --- src/luop.c | 14 ++++++++++---- src/luop.h | 2 ++ 2 files changed, 12 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/luop.c b/src/luop.c index 1b17fe3..3bedbaa 100644 --- a/src/luop.c +++ b/src/luop.c @@ -114,6 +114,14 @@ struct lu_operation *lu_op_alloc(struct osmo_gsup_server *srv) return luop; } +void lu_op_free(struct lu_operation *luop) +{ + /* Only attempt to remove when it was ever added to a list. */ + if (luop->list.next) + llist_del(&luop->list); + talloc_free(luop); +} + struct lu_operation *lu_op_alloc_conn(struct osmo_gsup_conn *conn) { uint8_t *peer_addr; @@ -183,8 +191,7 @@ void lu_op_tx_error(struct lu_operation *luop, enum gsm48_gmm_cause cause) _luop_tx_gsup(luop, &gsup); - llist_del(&luop->list); - talloc_free(luop); + lu_op_free(luop); } /*! Transmit UPD_LOC_RESULT and destroy lu_operation */ @@ -197,8 +204,7 @@ void lu_op_tx_ack(struct lu_operation *luop) _luop_tx_gsup(luop, &gsup); - llist_del(&luop->list); - talloc_free(luop); + lu_op_free(luop); } /*! Send Cancel Location to old VLR/SGSN */ diff --git a/src/luop.h b/src/luop.h index ab1bc24..053a025 100644 --- a/src/luop.h +++ b/src/luop.h @@ -79,3 +79,5 @@ void lu_op_tx_ack(struct lu_operation *luop); void lu_op_tx_cancel_old(struct lu_operation *luop); void lu_op_tx_insert_subscr_data(struct lu_operation *luop); void lu_op_tx_del_subscr_data(struct lu_operation *luop); + +void lu_op_free(struct lu_operation *luop); -- cgit v1.2.3