Skip to content

Commit

Permalink
Merge pull request #325 from Jimilian/fix_deadlock
Browse files Browse the repository at this point in the history
Fix the deadlock in DependencyQueueTaskDispatcher
  • Loading branch information
rsandell committed Sep 13, 2017
2 parents 1ecb59c + 298f2eb commit 68422f1
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 5 deletions.
Expand Up @@ -204,7 +204,8 @@ protected List<Job> getBlockingDependencyProjects(List<Job> dependencies,
ToGerritRunListener toGerritRunListener = ToGerritRunListener.getInstance();
if (toGerritRunListener != null) {
for (Job dependency : dependencies) {
if (toGerritRunListener.isProjectTriggeredAndIncomplete(dependency, event)) {
if (toGerritRunListener.isTriggered(dependency, event)
&& toGerritRunListener.isBuilding(dependency, event)) {
blockingProjects.add(dependency);
}
}
Expand Down
Expand Up @@ -219,12 +219,14 @@ public void shouldBlockTriggeringEvents() {
dispatcher.onDoneTriggeringAll(patchsetCreated);
//Setting the dependency as "triggered but not built"
doReturn(true).when(toGerritRunListenerMock).
isProjectTriggeredAndIncomplete(abstractProjectDependencyMock, patchsetCreated);
isBuilding(abstractProjectDependencyMock, patchsetCreated);
doReturn(true).when(toGerritRunListenerMock).
isTriggered(abstractProjectDependencyMock, patchsetCreated);
cause = dispatcher.canRun(item);
assertNotNull("Build should be blocked", cause);
//Setting the dependency as "triggered and built"
doReturn(false).when(toGerritRunListenerMock).
isProjectTriggeredAndIncomplete(abstractProjectDependencyMock, patchsetCreated);
isBuilding(abstractProjectDependencyMock, patchsetCreated);
cause = dispatcher.canRun(item);
assertNull("Build should not be blocked", cause);
}
Expand Down Expand Up @@ -263,12 +265,14 @@ public void shouldBlockTriggeringManualPatchsetCreated() {
verify(manualPatchsetCreated, times(1)).removeListener(dispatcher);
//Setting the dependency as "triggered but not built"
doReturn(true).when(toGerritRunListenerMock).
isProjectTriggeredAndIncomplete(abstractProjectDependencyMock, manualPatchsetCreated);
isTriggered(abstractProjectDependencyMock, manualPatchsetCreated);
doReturn(true).when(toGerritRunListenerMock).
isBuilding(abstractProjectDependencyMock, manualPatchsetCreated);
cause = dispatcher.canRun(item);
assertNotNull("Build should be blocked", cause);
//Setting the dependency as "triggered and built"
doReturn(false).when(toGerritRunListenerMock).
isProjectTriggeredAndIncomplete(abstractProjectDependencyMock, manualPatchsetCreated);
isBuilding(abstractProjectDependencyMock, manualPatchsetCreated);
cause = dispatcher.canRun(item);
assertNull("Build should not be blocked", cause);
}
Expand Down

0 comments on commit 68422f1

Please sign in to comment.