Terminate process conditionally

Hi guys.
Lets say I have following process definition

I need to provide a user with ability to cancel/terminate started process. But process can be cancelled untill last user task is completed.
I am wondering how it can be done using bpmn.
My first thought was to use event based subprocess with message start event. To check within the subprocess if the parent process marked as “non cancellable” or not. The problem with this approach is that when message start event is the interrapting one - I can not control termination of the parent process - it is being terminated regardless of any conditions. If start event is non interrupting - how in this case can I terminate the parent process? Termination end event kills only the subprocess.

Another option, instead of using subprocess, would be to create, right after the start event - using parallel gateway - additional flow(token) with Message Intermidiate Catch event that ends with terminate end event which cancels/kills entire process (after checking that process still cancellable).

Problem with this approach is that when main token reaches proceses end event (which is not a Terminate one) I still have one “live” token, and need to do with it something manually. (kill the token in some way ?)
Can you please advise if there are some more straightforward ways to achive my goal?

Hi @viZet,

You can try conditional boundary event (interrupting) as in the below example

Thank you very much, @hassang!
I ended up with following workflow


Looks much simpler then ones I tried to invent )