summaryrefslogtreecommitdiffstats
blob: b54d0e11b7bad9176f1f41d517fb640a8ee5f624 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
=========================================================================
 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.
=========================================================================