Merge pull request #844 from sipa/shutdownfix
authorPieter Wuille <pieter.wuille@gmail.com>
Thu, 16 Feb 2012 11:34:11 +0000 (03:34 -0800)
committerPieter Wuille <pieter.wuille@gmail.com>
Thu, 16 Feb 2012 11:34:11 +0000 (03:34 -0800)
Several shutdown-related fixes

1  2 
src/net.cpp

diff --combined src/net.cpp
@@@ -740,17 -740,13 +740,17 @@@ void ThreadSocketHandler2(void* parg
              struct sockaddr_in sockaddr;
              socklen_t len = sizeof(sockaddr);
              SOCKET hSocket = accept(hListenSocket, (struct sockaddr*)&sockaddr, &len);
 -            CAddress addr(sockaddr);
 +            CAddress addr;
              int nInbound = 0;
  
 +            if (hSocket != INVALID_SOCKET)
 +                addr = CAddress(sockaddr);
 +
              CRITICAL_BLOCK(cs_vNodes)
                  BOOST_FOREACH(CNode* pnode, vNodes)
                  if (pnode->fInbound)
                      nInbound++;
 +
              if (hSocket == INVALID_SOCKET)
              {
                  if (WSAGetLastError() != WSAEWOULDBLOCK)
@@@ -1278,9 -1274,13 +1278,13 @@@ void ThreadOpenConnections2(void* parg
      int64 nStart = GetTime();
      loop
      {
-         // Limit outbound connections
          vnThreadsRunning[1]--;
          Sleep(500);
+         vnThreadsRunning[1]++;
+         if (fShutdown)
+             return;
+         // Limit outbound connections
          loop
          {
              int nOutbound = 0;
              nMaxOutboundConnections = min(nMaxOutboundConnections, (int)GetArg("-maxconnections", 125));
              if (nOutbound < nMaxOutboundConnections)
                  break;
+             vnThreadsRunning[1]--;
              Sleep(2000);
+             vnThreadsRunning[1]++;
              if (fShutdown)
                  return;
          }
-         vnThreadsRunning[1]++;
-         if (fShutdown)
-             return;
  
          bool fAddSeeds = false;
  
@@@ -1770,7 -1769,7 +1773,7 @@@ bool StopNode(
      fShutdown = true;
      nTransactionsUpdated++;
      int64 nStart = GetTime();
-     while (vnThreadsRunning[0] > 0 || vnThreadsRunning[2] > 0 || vnThreadsRunning[3] > 0 || vnThreadsRunning[4] > 0
+     while (vnThreadsRunning[0] > 0 || vnThreadsRunning[1] > 0 || vnThreadsRunning[2] > 0 || vnThreadsRunning[3] > 0 || vnThreadsRunning[4] > 0
          || (fHaveUPnP && vnThreadsRunning[5] > 0) || vnThreadsRunning[6] > 0 || vnThreadsRunning[7] > 0
      )
      {