From 673018fed99aab80c3ac23c95f568ff0bf272f60 Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Sun, 10 Jul 2016 15:09:43 +0200 Subject: fsm: call 'onenter' as last step of a state change This is useful to allow the user to terinate the fsm from the onenter() callback. Change-Id: Ia45a1f3279e702028250e10dc54b2d46a4039905 --- src/fsm.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'src/fsm.c') diff --git a/src/fsm.c b/src/fsm.c index 8fedae26..6649b091 100644 --- a/src/fsm.c +++ b/src/fsm.c @@ -323,14 +323,15 @@ int osmo_fsm_inst_state_chg(struct osmo_fsm_inst *fi, uint32_t new_state, LOGPFSM(fi, "state_chg to %s\n", osmo_fsm_state_name(fsm, new_state)); fi->state = new_state; - if (st->onenter) - st->onenter(fi, old_state); - if (timeout_secs) { fi->T = T; osmo_timer_schedule(&fi->timer, timeout_secs, 0); } + /* Call 'onenter' last, user might terminate FSM from there */ + if (st->onenter) + st->onenter(fi, old_state); + return 0; } -- cgit v1.2.3