From 7b4d88b9f8ea38aa2d5d4ca6451f07dea65eb9d7 Mon Sep 17 00:00:00 2001 From: ymlam Date: Sat, 27 Aug 2022 02:12:48 -0400 Subject: [PATCH] Fix bug of sometimes not terminating broadcast when paused with large number of service threads. This happens when all remaining jobs are being serviced by service threads when PAUSE is initiated. Similarly fixed for CANCEL. --- src/main/java/altk/comm/engine/Broadcast.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/altk/comm/engine/Broadcast.java b/src/main/java/altk/comm/engine/Broadcast.java index 8ae901a..1c0a21d 100644 --- a/src/main/java/altk/comm/engine/Broadcast.java +++ b/src/main/java/altk/comm/engine/Broadcast.java @@ -220,6 +220,7 @@ public abstract class Broadcast toStates.put(BroadcastState.CANCELING, Arrays.asList( BroadcastState.ABORTING, BroadcastState.ABORTED, + BroadcastState.COMPLETED, BroadcastState.CANCELED, // User action BroadcastState.PURGED // User action )); @@ -233,6 +234,7 @@ public abstract class Broadcast // Transitions from PAUSING toStates.put(BroadcastState.PAUSING, Arrays.asList( BroadcastState.RUNNING, // User action + BroadcastState.COMPLETED, BroadcastState.ABORTING, BroadcastState.CANCELED, // User action BroadcastState.PAUSED, @@ -1182,7 +1184,10 @@ public abstract class Broadcast serviceActivityCount += increment; if (increment < 0 && serviceActivityCount <= 0) { - if (state == BroadcastState.RUNNING) + if (state == BroadcastState.RUNNING + || state == BroadcastState.PAUSING + || state == BroadcastState.CANCELING + ) { // TODO: investigate possibility that 0 remainingJobCount may // not be final. It may still change because a finishing job