Skip to content

Commit 0d373a3

Browse files
committed
Issue 375: Two http_listeners on one port
1 parent 22c4c69 commit 0d373a3

File tree

1 file changed

+19
-10
lines changed

1 file changed

+19
-10
lines changed

Release/src/http/listener/http_server_asio.cpp

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -855,19 +855,28 @@ pplx::task<void> http_linux_server::register_listener(details::http_listener_imp
855855
if (m_registered_listeners.find(listener) != m_registered_listeners.end())
856856
throw std::invalid_argument("listener already registered");
857857

858-
m_registered_listeners[listener] = utility::details::make_unique<pplx::extensibility::reader_writer_lock_t>();
858+
try
859+
{
860+
m_registered_listeners[listener] = utility::details::make_unique<pplx::extensibility::reader_writer_lock_t>();
859861

860-
auto found_hostport_listener = m_listeners.find(hostport);
861-
if (found_hostport_listener == m_listeners.end())
862-
{
863-
found_hostport_listener = m_listeners.insert(
864-
std::make_pair(hostport, utility::details::make_unique<details::hostport_listener>(this, hostport))).first;
862+
auto found_hostport_listener = m_listeners.find(hostport);
863+
if (found_hostport_listener == m_listeners.end())
864+
{
865+
found_hostport_listener = m_listeners.insert(
866+
std::make_pair(hostport, utility::details::make_unique<details::hostport_listener>(this, hostport))).first;
865867

866-
if (m_started)
867-
found_hostport_listener->second->start();
868-
}
868+
if (m_started)
869+
found_hostport_listener->second->start();
870+
}
869871

870-
found_hostport_listener->second->add_listener(path, listener);
872+
found_hostport_listener->second->add_listener(path, listener);
873+
}
874+
catch(...) //naive solution
875+
{
876+
m_registered_listeners.erase(listener);
877+
m_listeners.erase(hostport);
878+
throw;
879+
}
871880
}
872881

873882
return pplx::task_from_result();

0 commit comments

Comments
 (0)