| Line# | Code |
| 1 | //--- process.c\exit_process:123-172 |
| 2 | proctype exit_process(chan exit_process_sync_ch;chan params_chan) |
| 3 | { chan ret_chan = [0] of {int}; |
| 4 | int p, fromProcess; params_chan ? p,fromProcess; // Receiving parameters |
| 5 | mtype: ptResult ptRes; mtype:process_data_t data; int q, result; |
| 6 | int old_current = process_current; |
| 7 | q = process_list; //- Begin of process.c\exit_process:133 |
| 8 | do :: (q != NULL && q != p) -> q = processes[q].next; |
| 9 | :: else -> break; od;//- End of process.c\exit_process:133 |
| 10 | if //process.c\exit_process:134-136 |
| 11 | :: (q == NULL ) -> goto end; |
| 12 | :: else -> skip; |
| 13 | fi;//End of process.c\exit_process:134-136 |
| 14 | process_is_running_params_chan ! p; |
| 15 | run process_is_running(ret_chan,process_is_running_params_chan); |
| 16 | ret_chan ? result; |
| 17 | if |
| 18 | :: ( result) -> processes[p].state = PROCESS_STATE_NONE; |
| 19 | q = process_list;//process.c\exit_process:147-151 |
| 20 | do |
| 21 | :: (q != NULL) -> |
| 22 | if |
| 23 | :: ( q != p) -> |
| 24 | call_process_params_chan ! q , PROCESS_EVENT_EXITED , p ; |
| 25 | run call_process( ret_chan, call_process_params_chan ); |
| 26 | ret_chan ? result; |
| 27 | fi; q = processes[q].next; |
| 28 | :: else -> break; |
| 29 | od//End of process.c\exit_process:147-151 |
| 30 | if //process.c\exit_process:153-157 |
| 31 | :: ( p != fromProcess ) -> process_current = p; |
| 32 | pThread_params_chan ! processes[p].thread,PROCESS_EVENT_EXIT , data ; |
| 33 | pThread_sync_chan ? eval(processes[p].thread),ptRes; |
| 34 | :: else -> skip; |
| 35 | fi //End of process.c\exit_process:153-157 |
| 36 | :: else -> skip; |
| 37 | fi; |
| 38 | if //process.c\exit_process:160-169 |
| 39 | :: ( p == process_list) -> process_list = processes[process_list].next; |
| 40 | :: else -> q = process_list; //process.c\exit_process:163-168 |
| 41 | do |
| 42 | :: (q != NULL) -> |
| 43 | if //process.c\exit_process:164-167 |
| 44 | :: ( processes[q].next == p ) -> processes[q].next = processes[p].next; |
| 45 | break; |
| 46 | fi ;//process.c\exit_process:164-167 |
| 47 | q = processes[q].next; |
| 48 | :: else -> break; |
| 49 | od //End of process.c\exit_process:163-168 |
| 50 | fi; //End of process.c\exit_process:160-169 |
| 51 | process_current = old_current ; |
| 52 | end:exit_process_sync_ch ! 0; |
| 53 | }//--- End of process.c\exit_process:123-172 |
exit_process() proctype
×
https://people.iut.ac.ir/en/mahmoudzadeh/exitprocess-proctype?view=qrcode