protected internal virtual void signalCompensationDone(ActivityExecution execution) { // default behavior is to join compensating executions and propagate the signal if all executions have compensated // only wait for non-event-scope executions cause a compensation event subprocess consume the compensation event and // do not have to compensate embedded subprocesses (which are still non-event-scope executions) if (((PvmExecutionImpl)execution).NonEventScopeExecutions.Count == 0) { if (execution.Parent != null) { ActivityExecution parent = execution.Parent; execution.remove(); parent.signal(SIGNAL_COMPENSATION_DONE, null); } } else { ((ExecutionEntity)execution).forceUpdate(); } }