diff --git a/src/common/nm_bts_fsm.c b/src/common/nm_bts_fsm.c index d2c48fb42..c825ab5e6 100644 --- a/src/common/nm_bts_fsm.c +++ b/src/common/nm_bts_fsm.c @@ -57,6 +57,9 @@ static void ev_dispatch_children(struct gsm_bts *bts, uint32_t event) static void st_op_disabled_notinstalled_on_enter(struct osmo_fsm_inst *fi, uint32_t prev_state) { struct gsm_bts *bts = (struct gsm_bts *)fi->priv; + /* Reset state: */ + bts->si_valid = 0; + bts->mo.setattr_success = false; bts->mo.opstart_success = false; oml_mo_state_chg(&bts->mo, NM_OPSTATE_DISABLED, NM_AVSTATE_NOT_INSTALLED, NM_STATE_LOCKED); @@ -150,8 +153,6 @@ static void nm_bts_allstate(struct osmo_fsm_inst *fi, uint32_t event, void *data case NM_EV_SHUTDOWN_FINISH: /* Propagate event to children: */ ev_dispatch_children(bts, event); - /* Reset state: */ - bts->si_valid = 0; nm_bts_fsm_state_chg(fi, NM_BTS_ST_OP_DISABLED_NOTINSTALLED); break; default: diff --git a/src/common/nm_channel_fsm.c b/src/common/nm_channel_fsm.c index 645600521..8ffddae87 100644 --- a/src/common/nm_channel_fsm.c +++ b/src/common/nm_channel_fsm.c @@ -55,6 +55,11 @@ static bool ts_can_be_enabled(const struct gsm_bts_trx_ts *ts) static void st_op_disabled_notinstalled_on_enter(struct osmo_fsm_inst *fi, uint32_t prev_state) { struct gsm_bts_trx_ts *ts = (struct gsm_bts_trx_ts *)fi->priv; + /* Reset state: */ + gsm_ts_release(ts); + if (ts->vamos.peer) + gsm_ts_release(ts->vamos.peer); + ts->mo.setattr_success = false; ts->mo.opstart_success = false; oml_mo_state_chg(&ts->mo, NM_OPSTATE_DISABLED, NM_AVSTATE_NOT_INSTALLED, NM_STATE_LOCKED); @@ -193,9 +198,6 @@ static void nm_chan_allstate(struct osmo_fsm_inst *fi, uint32_t event, void *dat oml_mo_state_chg(&ts->mo, -1, -1, NM_STATE_SHUTDOWN); break; case NM_EV_SHUTDOWN_FINISH: - gsm_ts_release(ts); - if (ts->vamos.peer) - gsm_ts_release(ts->vamos.peer); nm_chan_fsm_state_chg(fi, NM_CHAN_ST_OP_DISABLED_NOTINSTALLED); break; default: