libosmocore/tests/tdef
Neels Hofmeyr d4b79c8772 fsm: add osmo_fsm_inst_state_chg_keep_or_start_timer()
During FSM design for osmo-msc, I noticed that the current behavior that
keep_timer=true doesn't guarantee a running timer can make FSM design a bit
complex, especially when using osmo_tdef for timeout definitions.

A desirable keep_timer=true behavior is one that keeps the previous timer
running, but starts a timer if no timer is running yet.

The simplest example is: a given state repeatedly transitions back to itself,
but wants to set a timeout only on first entering, avoiding to restart the
timeout on re-entering.

Another example is a repeated transition between two or more states, where the
first time we enter this group a timeout should start, but it should not
restart from scratch on every transition.

When using osmo_tdef timeout definitions for this, so far separate meaningless
states have to be introduced that merely set a fixed timeout.

To simplify, add osmo_fsm_inst_state_chg_keep_or_start_timer(), and use this in
osmo_tdef_fsm_inst_state_chg() when both keep_timer == true *and* T != 0.

In tdef_test.ok, the changes show that on first entering state L, the previous
T=1 is now kept with a large remaining timeout. When entering state L from O,
where no timer was running, this time L's T123 is started.

Change-Id: Id647511a4b18e0c4de0e66fb1f35dc9adb9177db
2019-03-07 23:10:21 +01:00
..
tdef_test.c fix tdef_test.c: do call the function-to-test in all cases 2019-03-06 07:00:30 +01:00
tdef_test.ok fsm: add osmo_fsm_inst_state_chg_keep_or_start_timer() 2019-03-07 23:10:21 +01:00
tdef_test_range_64bit.ok fsm: add osmo_fsm_inst_state_chg_keep_or_start_timer() 2019-03-07 23:10:21 +01:00
tdef_vty_test_config_root.c platform independence fix: tdef range tests 2019-02-06 01:05:37 +00:00
tdef_vty_test_config_root.vty represent negative T-timers as Osmocom-specific X-timers 2019-03-06 00:51:15 +01:00
tdef_vty_test_config_subnode.c platform independence fix: tdef range tests 2019-02-06 01:05:37 +00:00
tdef_vty_test_config_subnode.vty represent negative T-timers as Osmocom-specific X-timers 2019-03-06 00:51:15 +01:00
tdef_vty_test_dynamic.c add osmo_tdef API, originally adopted from osmo-bsc T_def 2019-02-04 18:52:16 +01:00
tdef_vty_test_dynamic.vty add osmo_tdef API, originally adopted from osmo-bsc T_def 2019-02-04 18:52:16 +01:00