fix: prevents a channel from being cleared out when there are event exceptions
This commit is contained in:
@@ -292,10 +292,15 @@ func interrupt(exceptions: PoolStringArray = []) -> void:
|
|||||||
_running_events[channel_name].interrupt()
|
_running_events[channel_name].interrupt()
|
||||||
_channels_state[channel_name] = true
|
_channels_state[channel_name] = true
|
||||||
|
|
||||||
|
var events_to_clear: Array = []
|
||||||
|
|
||||||
for channel_name in events_queue.keys():
|
for channel_name in events_queue.keys():
|
||||||
if events_queue[channel_name] != null:
|
if events_queue[channel_name] != null:
|
||||||
|
var found_exception: bool = false
|
||||||
|
|
||||||
for event in events_queue[channel_name]:
|
for event in events_queue[channel_name]:
|
||||||
if event.name in exceptions:
|
if event.name in exceptions:
|
||||||
|
found_exception = true
|
||||||
continue
|
continue
|
||||||
|
|
||||||
escoria.logger.debug(
|
escoria.logger.debug(
|
||||||
@@ -303,7 +308,16 @@ func interrupt(exceptions: PoolStringArray = []) -> void:
|
|||||||
"Interrupting queued event %s in channel %s..."
|
"Interrupting queued event %s in channel %s..."
|
||||||
% [event.name, channel_name])
|
% [event.name, channel_name])
|
||||||
event.interrupt()
|
event.interrupt()
|
||||||
|
events_to_clear.append(event)
|
||||||
|
|
||||||
|
# If we found an exception, we can't just clear out the entire
|
||||||
|
# channel's queue and so we remove everything but the exceptions in
|
||||||
|
# the channel. Otherwise, we're safe to just clear it out.
|
||||||
|
if found_exception:
|
||||||
|
for event in events_to_clear:
|
||||||
|
if events_queue[channel_name].has(event):
|
||||||
|
events_queue[channel_name].erase(event)
|
||||||
|
else:
|
||||||
events_queue[channel_name].clear()
|
events_queue[channel_name].clear()
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user