| Source | Transition | New State |
|---|---|---|
| Started | ||
| exe_msgque(manager) | L3_GRAND_INIT | Initialized |
| exe_msgque(manager) | other | Error |
| internal | error | Error |
| Initialized | ||
| exe_msgque(manager) | L3_GRAND_FINISH | Ending |
| exe_msgque(manager) | L3_RUN_START | Pre-run |
| exe_msgque(manager) | other | Error |
| internal | error | Error |
| Pre-run | ||
| private gloque | L3_RUN_BEGIN | Active Run |
| private gloque | other | Error |
| internal | error | Error |
| Active Run | ||
| ready gloque | L3_RUN_EVENT | Active Run |
| ready gloque | L3_RUN_PAUSE | Paused Run |
| ready gloque | L3_RUN_HALT | Post Run |
| ready gloque | L3_RUN_STOP | Post Run |
| ready gloque | other | Error |
| internal | error | Error |
| Paused Run | ||
| exe_msgque(manager) | L3_RUN_CONTINUE | Active Run |
| exe_msgque(manager) | other | Error |
| internal | error | Error |
| Post Run | ||
| private gloque | L3_RUN_ABORT | Initialized |
| private gloque | L3_RUN_END | Initialized |
| private gloque | other | Error |
| internal | error | Error |
| Ending | ||
| No legal transitions | ||
| Error | ||
| No legal transitions | ||
The box manager is the only process which writes to the private gloque, and the node executables are the only ones which receive from it.
In order to send a L3_RUN_BEGIN on the private gloque, the box manager pulls one globuf for each node executable from the inactive gloque. It then waits for acknowledgements on mgr_msgque.
In order to send a L3_RUN_END on the private gloque, the box manager tries to pull globufs from the free gloque. However, if this doesn't work after a period of time, the globufs are pulled from other gloques (first from the ready queue, and then the done queue), which can trash events. Once the desired number of globufs have been freed, it forms L3_RUN_END messages and sends them on the private gloque, waiting for acknowledgements via mgr_msgque.