#9 works for me, although there is a minor chance of a race where another engine starts an action after the INPROGRESS check.
How about this variant:
- API sends action to engine (round-robin)
- Engine checks status of stack
- Broadcast "Stop working on stack X" message to all engines
- IF stack status == "INPROGRESS":
+ Wait for response (0.5 sec timeout)
- Proceed with operation
So broadcast the stop regardless, and only wait for a response if it is known that another action was in progress
#9 works for me, although there is a minor chance of a race where another engine starts an action after the INPROGRESS check.
How about this variant:
- API sends action to engine (round-robin)
- Engine checks status of stack
- Broadcast "Stop working on stack X" message to all engines
- IF stack status == "INPROGRESS":
+ Wait for response (0.5 sec timeout)
- Proceed with operation
So broadcast the stop regardless, and only wait for a response if it is known that another action was in progress