From 356e0f101a05264d3f50336b46c15aa4ff736cea Mon Sep 17 00:00:00 2001 From: Jason Dove <1695733+jasongdove@users.noreply.github.com> Date: Tue, 13 Feb 2024 10:01:02 -0600 Subject: [PATCH] fix edge case where channel would fail to start (#1611) --- .../FFmpeg/FFmpegSegmenterService.cs | 21 +++++++++++++++++-- ErsatzTV/Controllers/IptvController.cs | 2 +- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/ErsatzTV.Core/FFmpeg/FFmpegSegmenterService.cs b/ErsatzTV.Core/FFmpeg/FFmpegSegmenterService.cs index 69913744..b90c1d1c 100644 --- a/ErsatzTV.Core/FFmpeg/FFmpegSegmenterService.cs +++ b/ErsatzTV.Core/FFmpeg/FFmpegSegmenterService.cs @@ -17,8 +17,25 @@ public class FFmpegSegmenterService(ILogger logger) : IF public bool TryAddWorker(string channelNumber, IHlsSessionWorker worker) { - bool result = _sessionWorkers.TryAdd(channelNumber, worker); - + var result = false; + + // check for worker + if (TryGetWorker(channelNumber, out IHlsSessionWorker existing)) + { + // if worker is null, pretend we added it + if (existing is null) + { + result = true; + } + + // if worker is not null, we cannot add one (so result should stay false) + } + else + { + // worker does not exist, so try adding a null one + result = _sessionWorkers.TryAdd(channelNumber, worker); + } + if (result) { OnWorkersChanged?.Invoke(this, EventArgs.Empty); diff --git a/ErsatzTV/Controllers/IptvController.cs b/ErsatzTV/Controllers/IptvController.cs index 3d5b8dde..2f902c55 100644 --- a/ErsatzTV/Controllers/IptvController.cs +++ b/ErsatzTV/Controllers/IptvController.cs @@ -142,7 +142,7 @@ public class IptvController : ControllerBase { // _logger.LogDebug("Checking for session worker for channel {Channel}", channelNumber); - if (_ffmpegSegmenterService.TryGetWorker(channelNumber, out IHlsSessionWorker worker)) + if (_ffmpegSegmenterService.TryGetWorker(channelNumber, out IHlsSessionWorker worker) && worker is not null) { // _logger.LogDebug("Trimming playlist for channel {Channel}", channelNumber);