Dispose Listeners if they fail to start

This commit is contained in:
Stephen Halter 2015-06-12 17:01:48 -07:00
parent 7e125faa73
commit 5c6a53c491
1 changed files with 20 additions and 6 deletions

View File

@ -91,19 +91,33 @@ namespace Microsoft.AspNet.Server.Kestrel
public IDisposable CreateServer(string scheme, string host, int port, Func<Frame, Task> application) public IDisposable CreateServer(string scheme, string host, int port, Func<Frame, Task> application)
{ {
var listeners = new List<Listener>(); var listeners = new List<Listener>();
foreach (var thread in Threads)
try
{ {
var listener = new Listener(Memory); foreach (var thread in Threads)
listener.StartAsync(scheme, host, port, thread, application).Wait(); {
listeners.Add(listener); var listener = new Listener(Memory);
listeners.Add(listener);
listener.StartAsync(scheme, host, port, thread, application).Wait();
}
return new Disposable(() =>
{
foreach (var listener in listeners)
{
listener.Dispose();
}
});
} }
return new Disposable(() => catch
{ {
foreach (var listener in listeners) foreach (var listener in listeners)
{ {
listener.Dispose(); listener.Dispose();
} }
});
throw;
}
} }
} }
} }