diff --git a/Streaming.cpp b/Streaming.cpp index 4cc0a592..db5f825e 100644 --- a/Streaming.cpp +++ b/Streaming.cpp @@ -1091,16 +1091,18 @@ namespace stream } else // we must save old acceptor and set it back { - auto oldAcceptor = m_Acceptor; - m_Acceptor = [acceptor, oldAcceptor, this](std::shared_ptr stream) - { - acceptor (stream); // m_Acceptor might be set after - m_Acceptor = oldAcceptor; // so we must restore old one before - }; + m_Acceptor = std::bind (&StreamingDestination::AcceptOnceAcceptor, this, + std::placeholders::_1, acceptor, m_Acceptor); } }); } + void StreamingDestination::AcceptOnceAcceptor (std::shared_ptr stream, Acceptor acceptor, Acceptor prev) + { + m_Acceptor = prev; + acceptor (stream); + } + void StreamingDestination::HandlePendingIncomingTimer (const boost::system::error_code& ecode) { if (ecode != boost::asio::error::operation_aborted) diff --git a/Streaming.h b/Streaming.h index be8f3f1a..c598245a 100644 --- a/Streaming.h +++ b/Streaming.h @@ -280,7 +280,9 @@ namespace stream void DeletePacket (Packet * p) { if (p) m_PacketsPool.Release (p); }; private: - + + void AcceptOnceAcceptor (std::shared_ptr stream, Acceptor acceptor, Acceptor prev); + void HandleNextPacket (Packet * packet); std::shared_ptr CreateNewIncomingStream (); void HandlePendingIncomingTimer (const boost::system::error_code& ecode);