Change in libosmocore[master]: fsm: Add osmo_fsm_inst_broadcast_children()

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

laforge gerrit-no-reply at lists.osmocom.org
Mon Dec 21 14:47:13 UTC 2020


laforge has submitted this change. ( https://gerrit.osmocom.org/c/libosmocore/+/21815 )

Change subject: fsm: Add osmo_fsm_inst_broadcast_children()
......................................................................

fsm: Add osmo_fsm_inst_broadcast_children()

This is a helper function to broadcast an event to all of the
siblings of a specified FSM instance.

Change-Id: I2ce398741a8672d7b7c4058d056f46e2fe7353c1
---
M include/osmocom/core/fsm.h
M src/fsm.c
2 files changed, 31 insertions(+), 0 deletions(-)

Approvals:
  laforge: Looks good to me, approved
  pespin: Looks good to me, but someone else must approve
  fixeria: Looks good to me, but someone else must approve
  Jenkins Builder: Verified



diff --git a/include/osmocom/core/fsm.h b/include/osmocom/core/fsm.h
index 7b262c7..77ebe7c 100644
--- a/include/osmocom/core/fsm.h
+++ b/include/osmocom/core/fsm.h
@@ -326,4 +326,15 @@
 				  void *data,
 				  const char *file, int line);
 
+/*! dispatch an event to all children of an osmocom finite state machine instance
+ *
+ *  This is a macro that calls _osmo_fsm_inst_broadcast_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_broadcast_children(fi, cause, data) \
+	_osmo_fsm_inst_broadcast_children(fi, cause, data, __FILE__, __LINE__)
+void _osmo_fsm_inst_broadcast_children(struct osmo_fsm_inst *fi, uint32_t event,
+					void *data, const char *file, int line);
+
 /*! @} */
diff --git a/src/fsm.c b/src/fsm.c
index 1e8909e..f1dbb41 100644
--- a/src/fsm.c
+++ b/src/fsm.c
@@ -1016,6 +1016,26 @@
 	}
 }
 
+/*! Broadcast an event to all the FSMs children.
+ *
+ *  Iterate over all children and send them the specified event.
+ *
+ *  \param[in] fi FSM instance of the parent
+ *  \param[in] event Event to send to children of FSM instance
+ *  \param[in] data Data to pass along with the event
+ *  \param[in] file Calling source file (from osmo_fsm_inst_dispatch macro)
+ *  \param[in] line Calling source line (from osmo_fsm_inst_dispatch macro)
+ */
+void _osmo_fsm_inst_broadcast_children(struct osmo_fsm_inst *fi,
+					uint32_t event, void *data,
+					const char *file, int line)
+{
+	struct osmo_fsm_inst *child, *tmp;
+	llist_for_each_entry_safe(child, tmp, &fi->proc.children, proc.child) {
+		_osmo_fsm_inst_dispatch(child, event, data, file, line);
+	}
+}
+
 const struct value_string osmo_fsm_term_cause_names[] = {
 	OSMO_VALUE_STRING(OSMO_FSM_TERM_PARENT),
 	OSMO_VALUE_STRING(OSMO_FSM_TERM_REQUEST),

-- 
To view, visit https://gerrit.osmocom.org/c/libosmocore/+/21815
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings

Gerrit-Project: libosmocore
Gerrit-Branch: master
Gerrit-Change-Id: I2ce398741a8672d7b7c4058d056f46e2fe7353c1
Gerrit-Change-Number: 21815
Gerrit-PatchSet: 3
Gerrit-Owner: laforge <laforge at osmocom.org>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <vyanitskiy at sysmocom.de>
Gerrit-Reviewer: laforge <laforge at osmocom.org>
Gerrit-Reviewer: neels <nhofmeyr at sysmocom.de>
Gerrit-Reviewer: pespin <pespin at sysmocom.de>
Gerrit-MessageType: merged
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20201221/ea96f280/attachment.htm>


More information about the gerrit-log mailing list