Skip to content

Commit f40c39e

Browse files
committed
Merge branch 'development' of https://git01.codeplex.com/casablanca into 2.6.0bump
2 parents db66364 + f976fc8 commit f40c39e

File tree

2 files changed

+27
-10
lines changed

2 files changed

+27
-10
lines changed

CONTRIBUTORS.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ intercommiura
1717
halex2005
1818
simonlep
1919
jracle
20+
gandziej
2021

2122
AutoDesk Inc.
2223
Cyrille Fauvel (cyrillef)

Release/src/http/listener/http_server_asio.cpp

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -853,21 +853,37 @@ pplx::task<void> http_linux_server::register_listener(details::http_listener_imp
853853
{
854854
pplx::extensibility::scoped_rw_lock_t lock(m_listeners_lock);
855855
if (m_registered_listeners.find(listener) != m_registered_listeners.end())
856+
{
856857
throw std::invalid_argument("listener already registered");
858+
}
857859

858-
m_registered_listeners[listener] = utility::details::make_unique<pplx::extensibility::reader_writer_lock_t>();
859-
860-
auto found_hostport_listener = m_listeners.find(hostport);
861-
if (found_hostport_listener == m_listeners.end())
860+
try
862861
{
863-
found_hostport_listener = m_listeners.insert(
864-
std::make_pair(hostport, utility::details::make_unique<details::hostport_listener>(this, hostport))).first;
862+
m_registered_listeners[listener] = utility::details::make_unique<pplx::extensibility::reader_writer_lock_t>();
865863

866-
if (m_started)
867-
found_hostport_listener->second->start();
868-
}
864+
auto found_hostport_listener = m_listeners.find(hostport);
865+
if (found_hostport_listener == m_listeners.end())
866+
{
867+
found_hostport_listener = m_listeners.insert(
868+
std::make_pair(hostport, utility::details::make_unique<details::hostport_listener>(this, hostport))).first;
869869

870-
found_hostport_listener->second->add_listener(path, listener);
870+
if (m_started)
871+
{
872+
found_hostport_listener->second->start();
873+
}
874+
}
875+
876+
found_hostport_listener->second->add_listener(path, listener);
877+
}
878+
catch (...)
879+
{
880+
// Future improvement - really this API should entirely be asychronously.
881+
// the hostport_listener::start() method should be made to return a task
882+
// throwing the exception.
883+
m_registered_listeners.erase(listener);
884+
m_listeners.erase(hostport);
885+
throw;
886+
}
871887
}
872888

873889
return pplx::task_from_result();

0 commit comments

Comments
 (0)