| 
					
				 | 
			
			
				@@ -3441,7 +3441,6 @@ bool SystemInformationImplementation::RetrieveInformationFromCpuInfoFile() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                             this->CurrentPositionInFile + 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   uint64_t NumberOfSockets = PhysicalIDs.size(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  NumberOfSockets = std::max(NumberOfSockets, (uint64_t)1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   // Physical ids returned by Linux don't distinguish cores. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   // We want to record the total number of cores in this->NumberOfPhysicalCPU 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   // (checking only the first proc) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -3451,9 +3450,11 @@ bool SystemInformationImplementation::RetrieveInformationFromCpuInfoFile() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     Cores = this->ExtractValueFromCpuInfoFile(buffer, "ncpus probed"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   auto NumberOfCoresPerSocket = (unsigned int)atoi(Cores.c_str()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  NumberOfCoresPerSocket = std::max(NumberOfCoresPerSocket, 1u); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  this->NumberOfPhysicalCPU = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    NumberOfCoresPerSocket * (unsigned int)NumberOfSockets; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  // If either one is 0, will be assigned with NumberOfLogicalCPU or 1 below. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  if (NumberOfSockets > 0 && NumberOfCoresPerSocket > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    this->NumberOfPhysicalCPU = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      NumberOfCoresPerSocket * (unsigned int)NumberOfSockets; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   // For systems which do not have "physical id" entries, neither "cpu cores" 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -3465,10 +3466,11 @@ bool SystemInformationImplementation::RetrieveInformationFromCpuInfoFile() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #endif 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   // gotta have one, and if this is 0 then we get a / by 0n 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   // better to have a bad answer than a crash 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  if (this->NumberOfPhysicalCPU <= 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    this->NumberOfPhysicalCPU = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  if (this->NumberOfLogicalCPU == 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  if (this->NumberOfPhysicalCPU == 0 && this->NumberOfLogicalCPU == 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    this->NumberOfPhysicalCPU = this->NumberOfLogicalCPU = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } else if (this->NumberOfPhysicalCPU == 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    this->NumberOfPhysicalCPU = this->NumberOfLogicalCPU; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } else if (this->NumberOfLogicalCPU == 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     this->NumberOfLogicalCPU = this->NumberOfPhysicalCPU; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   // LogicalProcessorsPerPhysical>1 => SMT. 
			 |