diff options
author | Neels Hofmeyr <neels@hofmeyr.de> | 2019-10-21 03:07:25 +0200 |
---|---|---|
committer | Neels Hofmeyr <neels@hofmeyr.de> | 2019-11-28 02:52:55 +0100 |
commit | bde605dfc574726f2e776c8230e47a5b25e63866 (patch) | |
tree | 655d7624d21eb94c8db85909a0a95986761bfec9 /src | |
parent | 00a476bc244845352505ed2b8952bf33c442c3e0 (diff) |
fix incoming call while Paging
Do not free the CC transaction when an MT subscriber is already being Paged.
Instead, invoke another paging request, which paging.c will correctly add to
the list of pending paging response callbacks to run.
A ttcn3 test is linked in the related patch (s.b.).
Related: OS#4240
Related: Ieeae6322d4e80893ea3408c6b74bf8e32bea8e46
Change-Id: Idd4537b5f4817d17e5c87d9a93775a32aee0e7be
Diffstat (limited to 'src')
-rw-r--r-- | src/libmsc/gsm_04_08_cc.c | 12 |
1 files changed, 2 insertions, 10 deletions
diff --git a/src/libmsc/gsm_04_08_cc.c b/src/libmsc/gsm_04_08_cc.c index 4e604e5dd..8cfb6117d 100644 --- a/src/libmsc/gsm_04_08_cc.c +++ b/src/libmsc/gsm_04_08_cc.c @@ -1935,19 +1935,11 @@ static int mncc_tx_to_gsm_cc(struct gsm_network *net, const union mncc_msg *msg) * log it now. */ LOG_TRANS_CAT(trans, DMNCC, LOGL_DEBUG, "rx %s\n", get_mncc_name(msg->msg_type)); - if (vsub->cs.is_paging) { - LOG_TRANS(trans, LOGL_DEBUG, - "rx %s, subscriber not yet connected, paging already started\n", - get_mncc_name(msg->msg_type)); - vlr_subscr_put(vsub, __func__); - trans_free(trans); - return 0; - } - /* store setup information until paging succeeds */ memcpy(&trans->cc.msg, data, sizeof(struct gsm_mncc)); - /* Request a channel */ + /* Request a channel. If Paging already started, paging_request_start() will append the new + * trans to the already ongoing Paging. */ trans->paging_request = paging_request_start(vsub, PAGING_CAUSE_CALL_CONVERSATIONAL, cc_paging_cb, trans, "MNCC: establish call"); if (!trans->paging_request) { |