JSM Thread Diagram
================================================================================
Start the JSM using JSM/ON
================================================================================
Note: States with stars by the names
are run in C, those without are
run in Java.
RUN JSM/ON
|
v
+-------------------------+
| *CHECK FOR JSM* |
| |
| do: Check for a running |------+
| JSM | |
+-------------------------+ |
| [None Running] | [Already Running]
v v
+-------------------------+ DONE
| *START JVM* |
| |
| do: Starts the Java VM |
+-------------------------+
|
v
+-------------------------+
| *START JSM* |
| |
| do: Setup IPC callbacks |
+-------------------------+
|
v
+-------------------------+
| *START NM* |
| |
| do: Run NmClassLoader |
+-------------------------+
|
v
+-------------------------+
| *PROCESS COMMANDS* |
| |
| do: Wait for commands |<--------------------------------------+
| to run. | |
+-------------------------+ |
| | +-------------------------+ |
| | [RUN message] | RUN COMMAND | | (old thread)
| +----------------->| |----+
| | do: Start thread to run |
| | command and make |
| | call-backs |
| [SHUTDOWN message] +-------------------------+
v | (new Java thread)
+-------------------------+ v
| *STOP NM* | +-------------------------+
| | | THREAD RUN | [run in FG]
| do: (noop for now) | | |------------+
+-------------------------+ | do: start command | |
| +-------------------------+ |
v [run in BG, Pipe] | |
+-------------------------+ v |
| *STOP JSM* | +-------------------------+ |
| | | NEW MIDAS THREAD | |
| do: Remove IPC callbacks| | | (new thrd) |
+-------------------------+ | do: create a thread to |----+ |
| | run command in. | | |
v +-------------------------+ | |
+-------------------------+ | (old thread) | |
| *STOP JVM* | v | |
| | DONE | |
| do: Stops the Java VM | v v
+-------------------------+ +-------------------------+
| | RUN START |
v | |
DONE | do: call M$SYNC and send|
| ACK to JSM RUN |
+-------------------------+
|
v
+-------------------------+
| OPEN |
+-------------------------+
|
+-----+ |
[not finished] | v v
| +-------------------------+
+--| PROCESS |
+-------------------------+
| [finished]
v
+-------------------------+
| CLOSE |
+-------------------------+
|
v
+-------------------------+
| RUN EXIT |
| |
| do: call M$RETURN |
+-------------------------+
|
v
DONE
================================================================================
Run a NeXtMidas command using JSM <COMMAND>
================================================================================
START
|
v
+-------------------------+
| *CHECK FOR JSM* |
| | [none running]
| do: Check for a running |----------------+
| JSM | |
+-------------------------+ |
| [already running] |
| v
| +-------------------------+
| | *??????* |
| | |
| | do: ??? |
| | |
| +-------------------------+
| | |
| (old thread) | | (new thread)
v | |
+-------------------------+ | |
| *JSM RUN* |<-------------+ +--------> START JVM
| |
| do: Send RUN to PROCESS |
| COMMANDS via IPC, |
| wait for ACK |
+-------------------------+
| [got ACK]
v
DONE
================================================================================
Turn off the JSM using JSM/OFF
================================================================================
START
|
v
+-------------------------+
| *CHECK FOR JSM* |
| | [none running]
| do: Check for a running |-------------+
| JSM | |
+-------------------------+ |
| [already running] |
v v
+-------------------------+ DONE
| *STOP JSM* |
| |
| do: Send SHUTDOWN to |
| PROCESS COMMANDS via|
| IPC, wait for ACK |
+-------------------------+
| [got ACK]
v
DONE