aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNeels Hofmeyr <nhofmeyr@sysmocom.de>2022-04-06 23:50:59 +0200
committerNeels Hofmeyr <nhofmeyr@sysmocom.de>2022-04-07 00:04:27 +0200
commita5cf45a3dcdc68853ae7a78c3dd99ec412bea0c0 (patch)
tree2fd1e161aaa23b8d28a20e9343d610a0d92d8da1
parent88c13cf4cc8ff81722d01abe1bdb297f7565a0c8 (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.c8
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,