[MERGED] openbsc[master]: sgsn_mm_ctx_cleanup_free(): clean up LLME iff present (Gb, n...

Submitted by gerrit-no-reply@lists.osmocom.org on June 2, 2016, 1:54 p.m.

Details

Message ID 20160602135441.DA1A822235@lists.osmocom.org
State New
Headers show

Commit Message

gerrit-no-reply@lists.osmocom.org June 2, 2016, 1:54 p.m.
Holger Freyther has submitted this change and it was merged.

Change subject: sgsn_mm_ctx_cleanup_free(): clean up LLME iff present (Gb, not Iu)
......................................................................


sgsn_mm_ctx_cleanup_free(): clean up LLME iff present (Gb, not Iu)

Assert that llme is unused for non-Gb (Iu) connections, and clean up otherwise.
Make sure the cleanup is left below the sgsn_mm_ctx_free() call, as the comment
states.

Change-Id: I891ae21afc1f4f60580b822273b5435e0e17d46f
---
M openbsc/src/gprs/gprs_sgsn.c
1 file changed, 10 insertions(+), 3 deletions(-)

Approvals:
  Harald Welte: Looks good to me, approved
  Jenkins Builder: Verified

Patch hide | download patch | download mbox

diff --git a/openbsc/src/gprs/gprs_sgsn.c b/openbsc/src/gprs/gprs_sgsn.c
index 8bb6850..722edec 100644
--- a/openbsc/src/gprs/gprs_sgsn.c
+++ b/openbsc/src/gprs/gprs_sgsn.c
@@ -197,10 +197,15 @@ 
 
 void sgsn_mm_ctx_cleanup_free(struct sgsn_mm_ctx *mm)
 {
-	struct gprs_llc_llme *llme = mm->gb.llme;
+	struct gprs_llc_llme *llme = NULL;
 	uint32_t tlli = mm->gb.tlli;
 	struct sgsn_pdp_ctx *pdp, *pdp2;
 	struct sgsn_signal_data sig_data;
+
+	if (mm->ran_type == MM_CTX_T_GERAN_Gb)
+		llme = mm->gb.llme;
+	else
+		OSMO_ASSERT(mm->gb.llme == NULL);
 
 	/* Forget about ongoing look-ups */
 	if (mm->ggsn_lookup) {
@@ -237,8 +242,10 @@ 
 	sgsn_mm_ctx_free(mm);
 	mm = NULL;
 
-	/* TLLI unassignment, must be called after sgsn_mm_ctx_free */
-	gprs_llgmm_assign(llme, tlli, 0xffffffff, GPRS_ALGO_GEA0, NULL);
+	if (llme) {
+		/* TLLI unassignment, must be called after sgsn_mm_ctx_free */
+		gprs_llgmm_assign(llme, tlli, 0xffffffff, GPRS_ALGO_GEA0, NULL);
+	}
 }