From ddaf090c4767a27150f577143263d90a6e7d1df0 Mon Sep 17 00:00:00 2001 From: Rutherther Date: Sat, 21 Jan 2023 14:26:44 +0100 Subject: [PATCH] fix(combat): do not cancel cancellation token after disposing it --- .../Operations/CompoundOperation.cs | 6 ++++++ .../Operations/UseItemOperation.cs | 6 ++++++ .../Operations/WalkInRangeOperation.cs | 6 ++++++ .../NosSmooth.Extensions.Combat/Operations/WalkOperation.cs | 6 ++++++ 4 files changed, 24 insertions(+) diff --git a/Extensions/NosSmooth.Extensions.Combat/Operations/CompoundOperation.cs b/Extensions/NosSmooth.Extensions.Combat/Operations/CompoundOperation.cs index 687c4ad..6a630a0 100644 --- a/Extensions/NosSmooth.Extensions.Combat/Operations/CompoundOperation.cs +++ b/Extensions/NosSmooth.Extensions.Combat/Operations/CompoundOperation.cs @@ -22,6 +22,7 @@ public class CompoundOperation : ICombatOperation private ICombatOperation? _currentOperation; private CancellationTokenSource? _ct; private Task? _compoundOperation; + private bool _disposed; /// /// Initializes a new instance of the class. @@ -117,6 +118,11 @@ public class CompoundOperation : ICombatOperation /// public void Cancel() { + if (_disposed) + { + return; + } + _disposed = true; _currentOperation?.Cancel(); _ct?.Cancel(); } diff --git a/Extensions/NosSmooth.Extensions.Combat/Operations/UseItemOperation.cs b/Extensions/NosSmooth.Extensions.Combat/Operations/UseItemOperation.cs index ee6a9b2..7495a02 100644 --- a/Extensions/NosSmooth.Extensions.Combat/Operations/UseItemOperation.cs +++ b/Extensions/NosSmooth.Extensions.Combat/Operations/UseItemOperation.cs @@ -22,6 +22,7 @@ public record UseItemOperation(InventoryItem Item) : ICombatOperation { private Task? _useItemOperation; private CancellationTokenSource? _ct; + private bool _disposed; /// public OperationQueueType QueueType => OperationQueueType.Item; @@ -94,6 +95,11 @@ public record UseItemOperation(InventoryItem Item) : ICombatOperation /// public void Dispose() { + if (_disposed) + { + return; + } + _disposed = true; _ct?.Cancel(); _useItemOperation?.Dispose(); _ct?.Dispose(); diff --git a/Extensions/NosSmooth.Extensions.Combat/Operations/WalkInRangeOperation.cs b/Extensions/NosSmooth.Extensions.Combat/Operations/WalkInRangeOperation.cs index d21d8f9..769183b 100644 --- a/Extensions/NosSmooth.Extensions.Combat/Operations/WalkInRangeOperation.cs +++ b/Extensions/NosSmooth.Extensions.Combat/Operations/WalkInRangeOperation.cs @@ -31,6 +31,7 @@ public record WalkInRangeOperation { private Task? _walkInRangeOperation; private CancellationTokenSource? _ct; + private bool _disposed; /// public OperationQueueType QueueType => OperationQueueType.TotalControl; @@ -208,6 +209,11 @@ public record WalkInRangeOperation /// public void Dispose() { + if (_disposed) + { + return; + } + _disposed = true; _ct?.Cancel(); _walkInRangeOperation?.Dispose(); _ct?.Dispose(); diff --git a/Extensions/NosSmooth.Extensions.Combat/Operations/WalkOperation.cs b/Extensions/NosSmooth.Extensions.Combat/Operations/WalkOperation.cs index 149c31f..5a94ed9 100644 --- a/Extensions/NosSmooth.Extensions.Combat/Operations/WalkOperation.cs +++ b/Extensions/NosSmooth.Extensions.Combat/Operations/WalkOperation.cs @@ -21,6 +21,7 @@ public record WalkOperation(WalkManager WalkManager, short X, short Y) : ICombat { private Task? _walkOperation; private CancellationTokenSource? _ct; + private bool _disposed; /// public OperationQueueType QueueType => OperationQueueType.TotalControl; @@ -110,6 +111,11 @@ public record WalkOperation(WalkManager WalkManager, short X, short Y) : ICombat /// public void Dispose() { + if (_disposed) + { + return; + } + _disposed = true; _ct?.Cancel(); _walkOperation?.Dispose(); _ct?.Dispose(); -- 2.49.0