aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/osmo-bsc/handover_logic.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/osmo-bsc/handover_logic.c b/src/osmo-bsc/handover_logic.c
index 960bf6993..064615cbc 100644
--- a/src/osmo-bsc/handover_logic.c
+++ b/src/osmo-bsc/handover_logic.c
@@ -82,6 +82,7 @@ static struct bsc_handover *bsc_ho_by_old_lchan(struct gsm_lchan *old_lchan)
int bsc_handover_start(enum hodec_id from_hodec_id, struct gsm_lchan *old_lchan, struct gsm_bts *new_bts,
enum gsm_chan_t new_lchan_type)
{
+ int rc;
struct gsm_subscriber_connection *conn;
struct bsc_handover *ho;
static uint8_t ho_ref = 0;
@@ -132,7 +133,14 @@ int bsc_handover_start(enum hodec_id from_hodec_id, struct gsm_lchan *old_lchan,
gsm_lchant_name(new_lchan_type),
do_assignment ? "Assignment" : "Handover");
- return osmo_fsm_inst_dispatch(conn->fi, GSCON_EV_HO_START, NULL);
+ rc = osmo_fsm_inst_dispatch(conn->fi, GSCON_EV_HO_START, NULL);
+
+ if (rc < 0) {
+ LOGPHO(ho, LOGL_ERROR, "Failed to trigger handover, conn state does not allow it\n");
+ conn->ho = NULL;
+ talloc_free(ho);
+ }
+ return rc;
}
/*! Start actual handover. Call bsc_handover_start() instead; The only legal caller is the GSCON FSM in