diff options
author | Neels Hofmeyr <nhofmeyr@sysmocom.de> | 2022-04-06 23:50:59 +0200 |
---|---|---|
committer | Neels Hofmeyr <nhofmeyr@sysmocom.de> | 2022-04-07 00:04:27 +0200 |
commit | a5cf45a3dcdc68853ae7a78c3dd99ec412bea0c0 (patch) | |
tree | 2fd1e161aaa23b8d28a20e9343d610a0d92d8da1 | |
parent | 88c13cf4cc8ff81722d01abe1bdb297f7565a0c8 (diff) |
assignment_fsm: always mark MGCP ci as completed
When the assignment fails, we roll back the MSC side RTP endpoint at the
MGW that may have been created before the failure occured. On success,
we clear the mgcp_ci pointer so it is not rolled back.
Always clear this, not only when lchan_changed == true. That is because
a channel Mode Modify may also have added a voice stream that should
retain the newly created RTP endpoint at the MGW.
If no voice stream is involved, the pointer should already be NULL.
There is no reason to have a condition for clearing this pointer.
Just always clear it.
This fixes all voice calls that modify a TCH lchan from signalling-only
to voice mode. Before this patch, their MSC side RTP endpoint was DLCX'd
right on assignment success.
In particular, this fixes Emergency Calls (which usually get a TCH lchan
assigned right from the start, and hence do a Mode Modify to add voice).
Related: SYS#5916
Change-Id: I5ab10ee7fd9c5d7608e8a06893881d990943feed
-rw-r--r-- | src/osmo-bsc/assignment_fsm.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/src/osmo-bsc/assignment_fsm.c b/src/osmo-bsc/assignment_fsm.c index 8d5e84115..c7fc335aa 100644 --- a/src/osmo-bsc/assignment_fsm.c +++ b/src/osmo-bsc/assignment_fsm.c @@ -283,11 +283,11 @@ static void assignment_success(struct gsm_subscriber_connection *conn) } } - if (lchan_changed) { - /* Rembered this only for error handling: should assignment fail, assignment_reset() will release - * the MGW endpoint right away. If successful, the conn continues to use the endpoint. */ - conn->assignment.created_ci_for_msc = NULL; + /* Rembered this only for error handling: should assignment fail, assignment_reset() will release + * the MGW endpoint right away. If successful, the conn continues to use the endpoint. */ + conn->assignment.created_ci_for_msc = NULL; + if (lchan_changed) { /* New RTP information is now accepted */ conn->user_plane.msc_assigned_cic = conn->assignment.req.msc_assigned_cic; osmo_strlcpy(conn->user_plane.msc_assigned_rtp_addr, conn->assignment.req.msc_rtp_addr, |