aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Server.Implementations/HttpServer/NetListener/HttpListenerServer.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Server.Implementations/HttpServer/NetListener/HttpListenerServer.cs')
-rw-r--r--MediaBrowser.Server.Implementations/HttpServer/NetListener/HttpListenerServer.cs15
1 files changed, 5 insertions, 10 deletions
diff --git a/MediaBrowser.Server.Implementations/HttpServer/NetListener/HttpListenerServer.cs b/MediaBrowser.Server.Implementations/HttpServer/NetListener/HttpListenerServer.cs
index 118bec60e..e73738e4e 100644
--- a/MediaBrowser.Server.Implementations/HttpServer/NetListener/HttpListenerServer.cs
+++ b/MediaBrowser.Server.Implementations/HttpServer/NetListener/HttpListenerServer.cs
@@ -17,7 +17,7 @@ namespace MediaBrowser.Server.Implementations.HttpServer.NetListener
{
private readonly ILogger _logger;
private HttpListener _listener;
- private readonly AutoResetEvent _listenForNextRequest = new AutoResetEvent(false);
+ private readonly ManualResetEventSlim _listenForNextRequest = new ManualResetEventSlim(false);
public Action<Exception, IRequest> ErrorHandler { get; set; }
public Action<WebSocketConnectEventArgs> WebSocketHandler { get; set; }
@@ -64,11 +64,12 @@ namespace MediaBrowser.Server.Implementations.HttpServer.NetListener
while (IsListening)
{
if (_listener == null) return;
+ _listenForNextRequest.Reset();
try
{
_listener.BeginGetContext(ListenerCallback, _listener);
- _listenForNextRequest.WaitOne();
+ _listenForNextRequest.Wait();
}
catch (Exception ex)
{
@@ -82,6 +83,8 @@ namespace MediaBrowser.Server.Implementations.HttpServer.NetListener
// Handle the processing of a request in here.
private void ListenerCallback(IAsyncResult asyncResult)
{
+ _listenForNextRequest.Set();
+
var listener = asyncResult.AsyncState as HttpListener;
HttpListenerContext context;
@@ -108,14 +111,6 @@ namespace MediaBrowser.Server.Implementations.HttpServer.NetListener
_logger.Warn(errMsg);
return;
}
- finally
- {
- // Once we know we have a request (or exception), we signal the other thread
- // so that it calls the BeginGetContext() (or possibly exits if we're not
- // listening any more) method to start handling the next incoming request
- // while we continue to process this request on a different thread.
- _listenForNextRequest.Set();
- }
Task.Factory.StartNew(() => InitTask(context));
}