diff options
author | Neels Hofmeyr <neels@hofmeyr.de> | 2017-12-15 03:48:48 +0100 |
---|---|---|
committer | Neels Hofmeyr <neels@hofmeyr.de> | 2017-12-20 23:07:10 +0100 |
commit | facd57ac565683895368a38ae50a85ebefdbffdf (patch) | |
tree | d53a4143bedb9f9b04e846ad52e4fad81627e2ac /src/libmsc/gsm_04_08.c | |
parent | 2ff5bcdc387a7eb5135e5a54d55027502952c86b (diff) |
fix: properly cancel all Paging on IMSI Detach
It's not clear cut which code is responsible for canceling pending requests,
since the requests list is kept in vlr_subscr, but sending out Paging does
certainly not belong in the VLR. Place the requests cleanup in gsm_04_08.c.
Add to test_ms_timeout_paging() in msc_vlr_test_ms_timeout.c to verify that a
pending paging is canceled on IMSI Detach.
Change-Id: Ib8874a9d92f02b0826525b55518332f6899688fd
Diffstat (limited to 'src/libmsc/gsm_04_08.c')
-rw-r--r-- | src/libmsc/gsm_04_08.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/src/libmsc/gsm_04_08.c b/src/libmsc/gsm_04_08.c index e370962ea..26ac92319 100644 --- a/src/libmsc/gsm_04_08.c +++ b/src/libmsc/gsm_04_08.c @@ -770,6 +770,10 @@ static int gsm48_rx_mm_imsi_detach_ind(struct gsm_subscriber_connection *conn, s gsm48_mi_type_name(mi_type), mi_string); } else { LOGP(DMM, LOGL_INFO, "IMSI DETACH for %s\n", vlr_subscr_name(vsub)); + + if (vsub->cs.is_paging) + subscr_paging_cancel(vsub, GSM_PAGING_EXPIRED); + vlr_subscr_rx_imsi_detach(vsub); osmo_signal_dispatch(SS_SUBSCR, S_SUBSCR_DETACHED, vsub); vlr_subscr_put(vsub); |