diff options
-rw-r--r-- | openbsc/src/gsm_subscriber.c | 13 | ||||
-rw-r--r-- | openbsc/tests/channel/channel_test.c | 1 |
2 files changed, 13 insertions, 1 deletions
diff --git a/openbsc/src/gsm_subscriber.c b/openbsc/src/gsm_subscriber.c index 3e3e74a2b..13260216e 100644 --- a/openbsc/src/gsm_subscriber.c +++ b/openbsc/src/gsm_subscriber.c @@ -103,8 +103,19 @@ static int subscr_paging_dispatch(unsigned int hooknum, unsigned int event, request->cbfn(hooknum, event, msg, data, request->param); subscr->in_callback = 0; - if (event != GSM_PAGING_SUCCEEDED) + if (event != GSM_PAGING_SUCCEEDED) { + /* + * This is a workaround for a bigger issue. We have + * issued paging that might involve multiple BTSes + * and one of them have failed now. We will stop the + * other paging requests as well as the next timeout + * would work on the next paging request and the queue + * will do bad things. This should be fixed by counting + * the outstanding results. + */ + paging_request_stop(NULL, subscr, NULL, NULL); subscr_put_channel(subscr); + } subscr_put(subscr); talloc_free(request); diff --git a/openbsc/tests/channel/channel_test.c b/openbsc/tests/channel/channel_test.c index a924e5b81..a63d8a56c 100644 --- a/openbsc/tests/channel/channel_test.c +++ b/openbsc/tests/channel/channel_test.c @@ -77,6 +77,7 @@ void input_event() {} void sms_alloc() {} void gsm_net_update_ctype(struct gsm_network *network) {} void gsm48_secure_channel() {} +void paging_request_stop() {} struct tlv_definition nm_att_tlvdef; |