Investigate potential concurrency bug

Description

Joram:
"
http://forums.activiti.org/en/viewtopic.php?f=4&t=1089&sid=60aa179e36798255251030d085ccb158

Heb het gecheckt en het is idd een bug. Process zit in bijlage.
Ik weet wat het probleem is, maar de fix zou het mixen van PVM en BPMN betekenen - niet goed dus:

In het process in bijlage gaat een fork gebeuren. 1 van de paden gaat via een automatic meteen door naar een end.
Het andere pad gaat naar een userTask.
Het probleem zit hem in de AtomicOperationActivityEnd die wordt opgeroepen in de end() van de execution.

In de AtomicOperationActivityEnd word bij het bereiken van de end de executions gepruned. Zoals verwacht, blijft enkel de process instance execution over.

...

// prune if necessary
InterpretableExecution concurrentRoot = (InterpretableExecution) execution.getParent();
if (concurrentRoot.getExecutions().size()==1) {
InterpretableExecution lastConcurrent = (InterpretableExecution) concurrentRoot.getExecutions().get(0);
if (!lastConcurrent.isScope()) {
concurrentRoot.setActivity((ActivityImpl) lastConcurrent.getActivity());
lastConcurrent.setReplacedBy(concurrentRoot);

..
}
}

MAAR het probleem zit hem in de lijn waar de setActivity() wordt gedaan. setActivity() is natuurlijk niet genoeg om ook de pointer van de TaskEntity te verzetten.
Vandaar de fout van de kerel op het forum: er wordt een taak inserted, die wijst naar een execution die niet meer bestaat (is gepruned).

Oplossing is checken of er een task bestaat met de geprunde execution, en de pointer verzetten. Maar dat is mengen van PVM en process language ....
"

Environment

None

Assignee

Tom Baeyens

Reporter

Tom Baeyens

Labels

None

Components

Fix versions

Priority

Major
Configure