Change KeepReading to StopReading and use bytes read as an indicator

This commit is contained in:
cvium 2022-02-12 09:51:47 +01:00
parent 8a2ebae74d
commit 8ec71c094a

View File

@ -83,10 +83,10 @@ namespace Jellyfin.Api.Helpers
int totalBytesRead = 0; int totalBytesRead = 0;
var stopwatch = Stopwatch.StartNew(); var stopwatch = Stopwatch.StartNew();
while (KeepReading(stopwatch.ElapsedMilliseconds)) while (true)
{ {
totalBytesRead += _stream.Read(buffer); totalBytesRead += _stream.Read(buffer);
if (totalBytesRead > 0) if (StopReading(totalBytesRead, stopwatch.ElapsedMilliseconds))
{ {
break; break;
} }
@ -109,10 +109,10 @@ namespace Jellyfin.Api.Helpers
int totalBytesRead = 0; int totalBytesRead = 0;
var stopwatch = Stopwatch.StartNew(); var stopwatch = Stopwatch.StartNew();
while (KeepReading(stopwatch.ElapsedMilliseconds)) while (true)
{ {
totalBytesRead += await _stream.ReadAsync(buffer, cancellationToken).ConfigureAwait(false); totalBytesRead += await _stream.ReadAsync(buffer, cancellationToken).ConfigureAwait(false);
if (totalBytesRead > 0) if (StopReading(totalBytesRead, stopwatch.ElapsedMilliseconds))
{ {
break; break;
} }
@ -172,10 +172,12 @@ namespace Jellyfin.Api.Helpers
} }
} }
private bool KeepReading(long elapsed) private bool StopReading(int bytesRead, long elapsed)
{ {
// If the job is null it's a live stream and will require user action to close, but don't keep it open indefinitely // It should stop reading when anything has been successfully read or if the job has exited
return !_job?.HasExited ?? elapsed < _timeoutMs; // If the job is null, however, it's a live stream and will require user action to close,
// but don't keep it open indefinitely if it isn't reading anything
return bytesRead > 0 || (_job?.HasExited ?? elapsed >= _timeoutMs);
} }
} }
} }