= Process completion procedure
:description: == What starts the procedure

== What starts the procedure

Process completion happens when:

* the last flownode of the process terminates (either normally or if a flownode is aborted/cancelled).
* the process is aborted/cancelled

== The procedure

There are three steps to the standard completion procedure:

* unregisterEventSubProcess: we remove the waiting events associated with the subprocesses of the current process
* handleProcessCompletion: we set the state of the process to what it needs to be (standard flow is to set is to *Completed*) and execute *ON_FINISH* process connectors.
* We call childReachedState() to notify a potential callActivity that the process finished. If a callActivity started the process, childReachedState() will :
 ** decrement the tokens of the callActivity.
 ** register a work to execute the callActivity if the process that finished was the last of the callActivity processes.

== Cancelling the process

Processes can be cancelled by using the API. All the flownodes and the process are put in the *CANCELLING* state, and works are registered to execute them all. The process is then put into the *CANCELLED* state without any other actions.

== Aborting the process

* If an error event has been fired by the current process, we trigger the _end error events_, and the process is put into state *ABORTING*.
* When the process is in state aborting, the behavior is similar to that of the state *CANCELLING*. Processes are directly put in the state *ABORTING* if they are not aborted by error events.
