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 |