Fixed yet another case of hanging on a bad stream

This commit is contained in:
Vasily 2020-05-08 23:11:43 +03:00
parent a517bd2e52
commit 3401d55f41

View File

@ -2,6 +2,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Globalization;
using System.IO; using System.IO;
using System.Net.Http; using System.Net.Http;
using System.Threading; using System.Threading;
@ -123,6 +124,13 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts
// Error happened during opening the stream, re-raise the exception to inform the caller // Error happened during opening the stream, re-raise the exception to inform the caller
throw taskCompletionSource.Task.Exception; throw taskCompletionSource.Task.Exception;
} }
if (!taskCompletionSource.Task.Result)
{
Logger.LogWarning("Zero bytes copied from stream {0} to {1} but no exception raised", GetType().Name, TempFilePath);
throw new EndOfStreamException(String.Format(CultureInfo.InvariantCulture,
"Zero bytes copied from stream {0}",
GetType().Name));
}
} }
private Task StartStreaming(HttpResponseInfo response, TaskCompletionSource<bool> openTaskCompletionSource, CancellationToken cancellationToken) private Task StartStreaming(HttpResponseInfo response, TaskCompletionSource<bool> openTaskCompletionSource, CancellationToken cancellationToken)
@ -146,7 +154,7 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts
} }
catch (OperationCanceledException ex) catch (OperationCanceledException ex)
{ {
Logger.LogWarning(ex, "Copying of {0} to {1} was canceled", GetType().Name, TempFilePath); Logger.LogInformation("Copying of {0} to {1} was canceled", GetType().Name, TempFilePath);
openTaskCompletionSource.TrySetException(ex); openTaskCompletionSource.TrySetException(ex);
} }
catch (Exception ex) catch (Exception ex)
@ -154,6 +162,7 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts
Logger.LogError(ex, "Error copying live stream {0} to {1}.", GetType().Name, TempFilePath); Logger.LogError(ex, "Error copying live stream {0} to {1}.", GetType().Name, TempFilePath);
openTaskCompletionSource.TrySetException(ex); openTaskCompletionSource.TrySetException(ex);
} }
openTaskCompletionSource.TrySetResult(false);
EnableStreamSharing = false; EnableStreamSharing = false;
await DeleteTempFiles(new List<string> { TempFilePath }).ConfigureAwait(false); await DeleteTempFiles(new List<string> { TempFilePath }).ConfigureAwait(false);