Browse Source

fix multiple gcs after extracting subtitles (#1129)

pull/1130/head
Jason Dove 3 years ago committed by GitHub
parent
commit
aca6bfb0bb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 5
      ErsatzTV.Application/Maintenance/Commands/ReleaseMemory.cs
  2. 9
      ErsatzTV.Application/Maintenance/Commands/ReleaseMemoryHandler.cs

5
ErsatzTV.Application/Maintenance/Commands/ReleaseMemory.cs

@ -1,3 +1,6 @@ @@ -1,3 +1,6 @@
namespace ErsatzTV.Application.Maintenance;
public record ReleaseMemory(bool ForceAggressive) : IRequest<Unit>, IBackgroundServiceRequest;
public record ReleaseMemory(bool ForceAggressive) : IRequest<Unit>, IBackgroundServiceRequest
{
public DateTimeOffset RequestTime = DateTimeOffset.Now;
}

9
ErsatzTV.Application/Maintenance/Commands/ReleaseMemoryHandler.cs

@ -6,6 +6,8 @@ namespace ErsatzTV.Application.Maintenance; @@ -6,6 +6,8 @@ namespace ErsatzTV.Application.Maintenance;
public class ReleaseMemoryHandler : IRequestHandler<ReleaseMemory, Unit>
{
private static long _lastRelease;
private readonly IFFmpegSegmenterService _ffmpegSegmenterService;
private readonly ILogger<ReleaseMemoryHandler> _logger;
@ -19,6 +21,12 @@ public class ReleaseMemoryHandler : IRequestHandler<ReleaseMemory, Unit> @@ -19,6 +21,12 @@ public class ReleaseMemoryHandler : IRequestHandler<ReleaseMemory, Unit>
public Task<Unit> Handle(ReleaseMemory request, CancellationToken cancellationToken)
{
if (!request.ForceAggressive && _lastRelease > request.RequestTime.Ticks)
{
// we've already released since the request was created, so don't bother
return Task.FromResult(Unit.Default);
}
bool hasActiveWorkers = _ffmpegSegmenterService.SessionWorkers.Any() || FFmpegProcess.ProcessCount > 0;
if (request.ForceAggressive || !hasActiveWorkers)
{
@ -35,6 +43,7 @@ public class ReleaseMemoryHandler : IRequestHandler<ReleaseMemory, Unit> @@ -35,6 +43,7 @@ public class ReleaseMemoryHandler : IRequestHandler<ReleaseMemory, Unit>
GC.Collect();
_logger.LogDebug("Completed garbage collection");
Interlocked.Exchange(ref _lastRelease, DateTimeOffset.Now.Ticks);
return Task.FromResult(Unit.Default);
}

Loading…
Cancel
Save