| ========================================================================= |
| State machine transitions for the Crash Generation Server |
| ========================================================================= |
| |
| ========================================================================= |
| | |
| STATE | ACTIONS |
| | |
| ========================================================================= |
| ERROR | Clean up resources used to serve clients. |
| | Always remain in ERROR state. |
| ------------------------------------------------------------------------- |
| INITIAL | Connect to the pipe asynchronously. |
| | If connection is successfully queued up asynchronously, |
| | go into CONNECTING state. |
| | If connection is done synchronously, go into CONNECTED |
| | state. |
| | For any unexpected problems, go into ERROR state. |
| ------------------------------------------------------------------------- |
| CONNECTING | Get the result of async connection request. |
| | If I/O is still incomplete, remain in the CONNECTING |
| | state. |
| | If connection is complete, go into CONNECTED state. |
| | For any unexpected problems, go into DISCONNECTING state. |
| ------------------------------------------------------------------------- |
| CONNECTED | Read from the pipe asynchronously. |
| | If read request is successfully queued up asynchronously, |
| | go into READING state. |
| | For any unexpected problems, go into DISCONNECTING state. |
| ------------------------------------------------------------------------- |
| READING | Get the result of async read request. |
| | If read is done, go into READ_DONE state. |
| | For any unexpected problems, go into DISCONNECTING state. |
| ------------------------------------------------------------------------- |
| READ_DONE | Register the client, prepare the reply and write the |
| | reply to the pipe asynchronously. |
| | If write request is successfully queued up asynchronously, |
| | go into WRITING state. |
| | For any unexpected problems, go into DISCONNECTING state. |
| ------------------------------------------------------------------------- |
| WRITING | Get the result of the async write request. |
| | If write is done, go into WRITE_DONE state. |
| | For any unexpected problems, go into DISCONNECTING state. |
| ------------------------------------------------------------------------- |
| WRITE_DONE | Read from the pipe asynchronously (for an ACK). |
| | If read request is successfully queued up asynchonously, |
| | go into READING_ACK state. |
| | For any unexpected problems, go into DISCONNECTING state. |
| ------------------------------------------------------------------------- |
| READING_ACK | Get the result of the async read request. |
| | If read is done, perform action for successful client |
| | connection. |
| | Go into DISCONNECTING state. |
| ------------------------------------------------------------------------- |
| DISCONNECTING | Disconnect from the pipe, reset the event and go into |
| | INITIAL state and signal the event again. If anything |
| | fails, go into ERROR state. |
| ========================================================================= |