From c014f606d055bb0ab09b6b9128078cb7a4e06c4c Mon Sep 17 00:00:00 2001 From: Neels Hofmeyr Date: Fri, 23 Dec 2016 04:26:39 +0100 Subject: fsm: factor out osmo_fsm_inst_term_children() from osmo_fsm_inst_term() osmo_fsm_inst_term() has code for safe child removal, publish that part as osmo_fsm_inst_term_children(); also use from osmo_fsm_inst_term(). As with osmo_fsm_inst_term(), add osmo_fsm_inst_term_children() macro to pass the caller's source file and line to new _osmo_fsm_inst_term_children(). Rationale: in openbsc's VLR, I want to discard child FSMs when certain events are handled. I could keep a pointer to each one, or simply iterate all children, making the code a lot simpler in some places. (Unfortunately, the patch may be displayed subobtimally. This really only moves the children-loop to a new function, replaces it with a call to _osmo_fsm_inst_term_children(fi, OSMO_FSM_TERM_PARENT, NULL, file, line) and drops two local iterator variables. No other code changes are made, even though the diff may show large removal + addition chunks) Change-Id: I8dac1206259cbd251660f793ad023aaa1dc705a2 --- include/osmocom/core/fsm.h | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'include') diff --git a/include/osmocom/core/fsm.h b/include/osmocom/core/fsm.h index 8f65533b..a2c20b78 100644 --- a/include/osmocom/core/fsm.h +++ b/include/osmocom/core/fsm.h @@ -187,4 +187,17 @@ void _osmo_fsm_inst_term(struct osmo_fsm_inst *fi, enum osmo_fsm_term_cause cause, void *data, const char *file, int line); +/*! \brief Terminate all child FSM instances of an FSM instance. + * + * This is a macro that calls _osmo_fsm_inst_term_children() with the given + * parameters as well as the caller's source file and line number for logging + * purposes. See there for documentation. + */ +#define osmo_fsm_inst_term_children(fi, cause, data) \ + _osmo_fsm_inst_term_children(fi, cause, data, __BASE_FILE__, __LINE__) +void _osmo_fsm_inst_term_children(struct osmo_fsm_inst *fi, + enum osmo_fsm_term_cause cause, + void *data, + const char *file, int line); + /*! @} */ -- cgit v1.2.3