exit_process() proctype

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
https://people.iut.ac.ir/en/mahmoudzadeh/exitprocess-proctype