Review at  https://gerrit.osmocom.org/155

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: I24163035f5e96339ad2d1db454734772a66351bc
---
M openbsc/src/gprs/gprs_sgsn.c
1 file changed, 10 insertions(+), 3 deletions(-)


  git pull ssh://gerrit.osmocom.org:29418/openbsc refs/changes/55/155/1

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);
+       }
 }



-- 
To view, visit https://gerrit.osmocom.org/155
To unsubscribe, visit https://gerrit.osmocom.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I24163035f5e96339ad2d1db454734772a66351bc
Gerrit-PatchSet: 1
Gerrit-Project: openbsc
Gerrit-Branch: master
Gerrit-Owner: Neels Hofmeyr <[email protected]>
Gerrit-Reviewer: daniel <[email protected]>

Reply via email to