-
Notifications
You must be signed in to change notification settings - Fork 58
Description
Problem statement
MSM currently allows 2 ways to defer events:
- Via a
deferred_eventsproperty in a state and - Via an action within a transition
The first possibility is consistent with the UML standard, but the second one is not foreseen by it. While this mechanism supports more than what is foreseen by UML, such as conditional event deferrals with the help of guards in the transition, it leads to undesired (and likely unsolvable, see #72 for more details) issues:
- due to the need to dispatch the event for evaluation, UML-compliant behavior cannot be ensured with this mechanism in orthogonal regions; events can be deferred and processed by different regions at the same time
- the event has to be removed from the deferred events queue and dispatched for evaluation and then get pushed back to it, leading to potential issues wrt. deferred event orders in the queue - worst case to infinite recursion
Possible solutions
For backmp11 there are 2 possiblities to handle the problem:
- Remove support for event deferral as an action, as it's anyway not foreseen by UML
- Provide an alternative approach that allows deferral evaluation at runtime, but is more similar to the
deferred_eventsstate property
Feedback required ❗
Solution no. 1 "remove support" is currently targeted for the next Boost release 1.91, mainly because it's not clear whether this functionality is needed in the first place.
If a more sophisticated event deferral mechanism than described in the UML standard is needed, please provide feedback by stating your use case and your needs.