VirtualBox

Changeset 46618 in vbox


Ignore:
Timestamp:
Jun 18, 2013 12:04:42 PM (11 years ago)
Author:
vboxsync
Message:

Runtime/r3/mp-win: coding style

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/r3/win/mp-win.cpp

    r46617 r46618  
    9494RTDECL(RTCPUID) RTMpGetCoreCount(void)
    9595{
    96     PSYSTEM_LOGICAL_PROCESSOR_INFORMATION pSysInfo = NULL;
    97     PSYSTEM_LOGICAL_PROCESSOR_INFORMATION pSysInfoTmp = NULL;
    98     DWORD sysProcInfoLen = 0;
    99     DWORD offset = 0;
    100     DWORD coreCount = 0;
    101     BOOL rc;
    10296    BOOL (WINAPI *pfnGetLogicalProcInfo)(PSYSTEM_LOGICAL_PROCESSOR_INFORMATION, PDWORD);
    10397
    10498    pfnGetLogicalProcInfo = (BOOL (WINAPI *)(PSYSTEM_LOGICAL_PROCESSOR_INFORMATION, PDWORD))
    10599                             GetProcAddress(GetModuleHandle("KERNEL32.DLL"), "GetLogicalProcessorInformation");
    106     /* 0 represent error condition. Can't return VERR* error codes as caller expects a unsigned value of core count.*/
     100    /* 0 represents an error condition. We cannot return VERR* error codes as caller expects a
     101     * unsigned value of core count.*/
    107102    if (!pfnGetLogicalProcInfo)
    108103        return 0;
    109104
    110     rc = pfnGetLogicalProcInfo(pSysInfo, &sysProcInfoLen);
    111     if (rc == FALSE)
     105    PSYSTEM_LOGICAL_PROCESSOR_INFORMATION pSysInfo = NULL;
     106    DWORD cbSysProcInfo = 0;
     107    BOOL fRc = pfnGetLogicalProcInfo(pSysInfo, &cbSysProcInfo);
     108    if (!fRc)
    112109    {
    113110        if (GetLastError() ==  ERROR_INSUFFICIENT_BUFFER)
    114         {
    115             RTMemFree(pSysInfo);
    116             pSysInfo = (PSYSTEM_LOGICAL_PROCESSOR_INFORMATION)RTMemAlloc(sysProcInfoLen);
    117             if (!pSysInfo)
    118                  return 0;
    119         }
    120         else
    121             return 0;
     111            pSysInfo = (PSYSTEM_LOGICAL_PROCESSOR_INFORMATION)RTMemAlloc(cbSysProcInfo);
    122112    }
    123113
    124     rc = pfnGetLogicalProcInfo(pSysInfo, &sysProcInfoLen);
    125     if (rc == FALSE)
     114    RTCPUID cCores = 0;
     115    if (pSysInfo)
    126116    {
     117        fRc = pfnGetLogicalProcInfo(pSysInfo, &cbSysProcInfo);
     118        if (fRc)
     119        {
     120            PSYSTEM_LOGICAL_PROCESSOR_INFORMATION pSysInfoTmp = pSysInfo;
     121            size_t offs = 0;
     122            while (offs + sizeof(SYSTEM_LOGICAL_PROCESSOR_INFORMATION) <= cbSysProcInfo)
     123            {
     124                switch (pSysInfoTmp->Relationship)
     125                {
     126                    case RelationProcessorCore:
     127                        cCore++;
     128                        break;
     129                    case RelationCache:
     130                    case RelationNumaNode:
     131                    case RelationProcessorPackage:
     132                    default:
     133                        ;
     134                }
     135                offs += sizeof(SYSTEM_LOGICAL_PROCESSOR_INFORMATION);
     136                pSysInfoTmp++;
     137            }
     138        }
    127139        RTMemFree(pSysInfo);
    128         return 0;
    129140    }
    130     pSysInfoTmp = pSysInfo;
    131     while (offset + sizeof(SYSTEM_LOGICAL_PROCESSOR_INFORMATION) <= sysProcInfoLen)
    132     {
    133         switch (pSysInfoTmp->Relationship)
    134         {
    135             case RelationProcessorCore:
    136                 coreCount++;
    137             break;
    138             case RelationCache:
    139             case RelationNumaNode:
    140             case RelationProcessorPackage:
    141             default:
    142             ;
    143         }
    144         offset += sizeof(SYSTEM_LOGICAL_PROCESSOR_INFORMATION);
    145         pSysInfoTmp++;
    146     }
    147     RTMemFree(pSysInfo);
    148     return coreCount;
     141    return cCores;
    149142}
    150143
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette