From 037f8ed043fc66eb8f49b306048365ec842399ae Mon Sep 17 00:00:00 2001 From: Neil Dorin Date: Fri, 2 Apr 2021 17:07:06 -0600 Subject: [PATCH] #671 Updates to GenericQueue to resolve issues when stopping program --- .../Queues/GenericQueue.cs | 58 +++++++++++++------ 1 file changed, 40 insertions(+), 18 deletions(-) diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Queues/GenericQueue.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Queues/GenericQueue.cs index 6759d32b..e382d16f 100644 --- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Queues/GenericQueue.cs +++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Queues/GenericQueue.cs @@ -150,13 +150,13 @@ namespace PepperDash.Essentials.Core.Queues _delayEnabled = pacing > 0; _delayTime = pacing; - //CrestronEnvironment.ProgramStatusEventHandler += programEvent => - //{ - // if (programEvent != eProgramStatusEventType.Stopping) - // return; + CrestronEnvironment.ProgramStatusEventHandler += programEvent => + { + if (programEvent != eProgramStatusEventType.Stopping) + return; - // Dispose(true); - //}; + Dispose(true); + }; } /// @@ -232,9 +232,20 @@ namespace PepperDash.Essentials.Core.Queues if (disposing) { Debug.Console(2, this, "Disposing..."); - _queue.Clear(); - Enqueue(null); - _worker.Join(); + if (_queue != null && !_queue.Disposed) + { + _queue.Clear(); + Enqueue(null); + } + //else + //{ + // if (_queue == null) + // Debug.Console(2, this, "_queue is null"); + // else + // Debug.Console(2, this, "_queue disposed: {0}", _queue.Disposed); + //} + //_worker.Join(); + _worker.Abort(); _waitHandle.Close(); } @@ -404,13 +415,13 @@ namespace PepperDash_Essentials_Core.Queues _delayEnabled = pacing > 0; _delayTime = pacing; - //CrestronEnvironment.ProgramStatusEventHandler += programEvent => - //{ - // if (programEvent != eProgramStatusEventType.Stopping) - // return; + CrestronEnvironment.ProgramStatusEventHandler += programEvent => + { + if (programEvent != eProgramStatusEventType.Stopping) + return; - // Dispose(true); - //}; + Dispose(true); + }; } /// @@ -480,9 +491,20 @@ namespace PepperDash_Essentials_Core.Queues if (disposing) { Debug.Console(2, this, "Disposing..."); - _queue.Clear(); - Enqueue(null); - _worker.Join(); + if (_queue != null && !_queue.Disposed) + { + _queue.Clear(); + Enqueue(null); + } + //else + //{ + // if (_queue == null) + // Debug.Console(2, this, "_queue is null"); + // else + // Debug.Console(2, this, "_queue disposed: {0}", _queue.Disposed); + //} + //_worker.Join(); + _worker.Abort(); _waitHandle.Close(); }