Browse Source

wait for UPnP discovery during startup

pull/590/head
orignal 9 years ago
parent
commit
5698ff9c4c
  1. 9
      UPnP.cpp
  2. 6
      UPnP.h

9
UPnP.cpp

@ -49,7 +49,9 @@ namespace transport @@ -49,7 +49,9 @@ namespace transport
m_IsRunning = true;
LogPrint(eLogInfo, "UPnP: starting");
m_Service.post (std::bind (&UPnP::Discover, this));
std::unique_lock<std::mutex> l(m_StartedMutex);
m_Thread.reset (new std::thread (std::bind (&UPnP::Run, this)));
m_Started.wait_for (l, std::chrono::seconds (5)); // 5 seconds maximum
}
UPnP::~UPnP ()
@ -80,7 +82,12 @@ namespace transport @@ -80,7 +82,12 @@ namespace transport
#else
m_Devlist = upnpDiscover (2000, m_MulticastIf, m_Minissdpdpath, 0, 0, &nerror);
#endif
{
// notify satrting thread
std::unique_lock<std::mutex> l(m_StartedMutex);
m_Started.notify_all ();
}
int r;
r = UPNP_GetValidIGD (m_Devlist, &m_upnpUrls, &m_upnpData, m_NetworkAddr, sizeof (m_NetworkAddr));
if (r == 1)

6
UPnP.h

@ -4,6 +4,8 @@ @@ -4,6 +4,8 @@
#ifdef USE_UPNP
#include <string>
#include <thread>
#include <condition_variable>
#include <mutex>
#include <memory>
#include <miniupnpc/miniwget.h>
@ -43,8 +45,10 @@ namespace transport @@ -43,8 +45,10 @@ namespace transport
bool m_IsRunning;
std::unique_ptr<std::thread> m_Thread;
std::condition_variable m_Started;
std::mutex m_StartedMutex;
boost::asio::io_service m_Service;
boost::asio::deadline_timer m_Timer;
boost::asio::deadline_timer m_Timer;
struct UPNPUrls m_upnpUrls;
struct IGDdatas m_upnpData;

Loading…
Cancel
Save