Browse Source

Merge branch 'dev' of github.com:/zerotier/ZeroTierOne into dev

Adam Ierymenko 2 years ago
parent
commit
af7ccff846
2 changed files with 30 additions and 26 deletions
  1. 14 16
      node/Bond.cpp
  2. 16 10
      windows/ZeroTierOne/ServiceInstaller.cpp

+ 14 - 16
node/Bond.cpp

@@ -1374,14 +1374,13 @@ void Bond::processBalanceTasks(int64_t now)
 		Mutex::Lock _l(_flows_m);
 		std::map<int16_t, SharedPtr<Flow> >::iterator flow_it = _flows.begin();
 		while (flow_it != _flows.end()) {
-			if (! _paths[flow_it->second->assignedPath].p) {
-				continue;
-			}
-			int originalPathIdx = flow_it->second->assignedPath;
-			if (! _paths[originalPathIdx].eligible) {
-				log("moving all flows from dead link %s", pathToStr(_paths[originalPathIdx].p).c_str());
-				if (assignFlowToBondedPath(flow_it->second, now, true)) {
-					_paths[originalPathIdx].assignedFlowCount--;
+			if (_paths[flow_it->second->assignedPath].p) {
+				int originalPathIdx = flow_it->second->assignedPath;
+				if (! _paths[originalPathIdx].eligible) {
+					log("moving all flows from dead link %s", pathToStr(_paths[originalPathIdx].p).c_str());
+					if (assignFlowToBondedPath(flow_it->second, now, true)) {
+						_paths[originalPathIdx].assignedFlowCount--;
+					}
 				}
 			}
 			++flow_it;
@@ -1394,14 +1393,13 @@ void Bond::processBalanceTasks(int64_t now)
 		Mutex::Lock _l(_flows_m);
 		std::map<int16_t, SharedPtr<Flow> >::iterator flow_it = _flows.begin();
 		while (flow_it != _flows.end()) {
-			if (! _paths[flow_it->second->assignedPath].p) {
-				continue;
-			}
-			int originalPathIdx = flow_it->second->assignedPath;
-			if (_paths[originalPathIdx].shouldAvoid) {
-				if (assignFlowToBondedPath(flow_it->second, now, true)) {
-					_paths[originalPathIdx].assignedFlowCount--;
-					return;	  // Only move one flow at a time
+			if (_paths[flow_it->second->assignedPath].p) {
+				int originalPathIdx = flow_it->second->assignedPath;
+				if (_paths[originalPathIdx].shouldAvoid) {
+					if (assignFlowToBondedPath(flow_it->second, now, true)) {
+						_paths[originalPathIdx].assignedFlowCount--;
+						return;	  // Only move one flow at a time
+					}
 				}
 			}
 			++flow_it;

+ 16 - 10
windows/ZeroTierOne/ServiceInstaller.cpp

@@ -49,28 +49,34 @@ std::string InstallService(PSTR pszServiceName,
                     PSTR pszAccount, 
                     PSTR pszPassword)
 {
-	std::string ret;
-    char szPathTmp[MAX_PATH],szPath[MAX_PATH];
+    std::string ret;
+    std::string path(0x7FFF, '\0');
+
     SC_HANDLE schSCManager = NULL;
     SC_HANDLE schService = NULL;
     SERVICE_DESCRIPTION sd;
     LPTSTR szDesc = TEXT("ZeroTier network virtualization service.");
 
-    if (GetModuleFileName(NULL, szPathTmp, ARRAYSIZE(szPath)) == 0)
+    DWORD dwCharacters = GetModuleFileName(NULL, path.data(), path.size());
+
+    if (dwCharacters == 0)
     {
-		ret = "GetModuleFileName failed, unable to get path to self";
+        ret = "GetModuleFileName failed, unable to get path to self";
         goto Cleanup;
     }
 
-	// Quote path in case it contains spaces
-	_snprintf_s(szPath,sizeof(szPath),"\"%s\"",szPathTmp);
+    // Trim excess nulls which the returned size does not include
+    path.resize(dwCharacters);
+
+    // Quote path in case it contains spaces
+    path = '"' + path + '"';
 
     // Open the local default service control manager database
     schSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_CONNECT | 
         SC_MANAGER_CREATE_SERVICE);
     if (schSCManager == NULL)
     {
-		ret = "OpenSCManager failed";
+        ret = "OpenSCManager failed";
         goto Cleanup;
     }
 
@@ -83,7 +89,7 @@ std::string InstallService(PSTR pszServiceName,
         SERVICE_WIN32_OWN_PROCESS,      // Service type
         dwStartType,                    // Service start type
         SERVICE_ERROR_NORMAL,           // Error control type
-        szPath,                         // Service's binary
+        path.c_str(),                   // Service's binary
         NULL,                           // No load ordering group
         NULL,                           // No tag identifier
         pszDependencies,                // Dependencies
@@ -92,7 +98,7 @@ std::string InstallService(PSTR pszServiceName,
         );
     if (schService == NULL)
     {
-		ret = "CreateService failed";
+        ret = "CreateService failed";
         goto Cleanup;
     }
 
@@ -112,7 +118,7 @@ Cleanup:
         schService = NULL;
     }
 
-	return ret;
+    return ret;
 }