VirtualBox

Ignore:
Timestamp:
Nov 26, 2018 3:44:41 PM (6 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
126937
Message:

HGCM: Replace C++-style inline members on VBOXHGCMSVCPARM with simple functions.
bugref:9172: Shared folder performance tuning
Changes in bugref:9172 caused a build regression on Ubuntu 18.10 due to the
use of RT_ZERO on a structure containing an embedded VBOXHGCMSVCPARM, as
VBOXHGCMSVCPARM had member functions and was therefore not a simple plain-
old-data structure. Rather than just doing the sensible thing and zeroing
it in a different way, I converted the inline member getters and setters to
standard inline C functions, including fixing callers. Actually I had planned
this for some time, as the member function use seemed a bit gratuitous in
hindsight.

Location:
trunk/src/VBox/HostServices/GuestProperties
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/HostServices/GuestProperties/service.cpp

    r75500 r75737  
    528528     */
    529529    if (   cParms != 4
    530         || RT_FAILURE(paParms[0].getPointer((void **)&papszNames, &cbDummy))
    531         || RT_FAILURE(paParms[1].getPointer((void **)&papszValues, &cbDummy))
    532         || RT_FAILURE(paParms[2].getPointer((void **)&pau64Timestamps, &cbDummy))
    533         || RT_FAILURE(paParms[3].getPointer((void **)&papszFlags, &cbDummy))
     530        || RT_FAILURE(HGCMSvcGetPv(&paParms[0], (void **)&papszNames, &cbDummy))
     531        || RT_FAILURE(HGCMSvcGetPv(&paParms[1], (void **)&papszValues, &cbDummy))
     532        || RT_FAILURE(HGCMSvcGetPv(&paParms[2], (void **)&pau64Timestamps, &cbDummy))
     533        || RT_FAILURE(HGCMSvcGetPv(&paParms[3], (void **)&papszFlags, &cbDummy))
    534534        )
    535535        rc = VERR_INVALID_PARAMETER;
     
    624624    LogFlowThisFunc(("\n"));
    625625    if (   cParms != 4  /* Hardcoded value as the next lines depend on it. */
    626         || RT_FAILURE(paParms[0].getString(&pcszName, &cbName))  /* name */
    627         || RT_FAILURE(paParms[1].getBuffer((void **)&pchBuf, &cbBuf))  /* buffer */
     626        || RT_FAILURE(HGCMSvcGetCStr(&paParms[0], &pcszName, &cbName))  /* name */
     627        || RT_FAILURE(HGCMSvcGetBuf(&paParms[1], (void **)&pchBuf, &cbBuf))  /* buffer */
    628628       )
    629629        rc = VERR_INVALID_PARAMETER;
     
    652652            size_t const cbValue  = pProp->mValue.size() + 1;
    653653            size_t const cbNeeded = cbValue + cbFlags;
    654             paParms[3].setUInt32((uint32_t)cbNeeded);
     654            HGCMSvcSetU32(&paParms[3], (uint32_t)cbNeeded);
    655655            if (cbBuf >= cbNeeded)
    656656            {
     
    659659                memcpy(pchBuf + cbValue, szFlags, cbFlags);
    660660
    661                 paParms[2].setUInt64(pProp->mTimestamp);
     661                HGCMSvcSetU64(&paParms[2], pProp->mTimestamp);
    662662
    663663                /*
     
    708708    if (   RT_SUCCESS(rc)
    709709        && (   (cParms < 2) || (cParms > 3)  /* Hardcoded value as the next lines depend on it. */
    710             || RT_FAILURE(paParms[0].getString(&pcszName, &cchName))  /* name */
    711             || RT_FAILURE(paParms[1].getString(&pcszValue, &cchValue))  /* value */
     710            || RT_FAILURE(HGCMSvcGetCStr(&paParms[0], &pcszName, &cchName))  /* name */
     711            || RT_FAILURE(HGCMSvcGetCStr(&paParms[1], &pcszValue, &cchValue))  /* value */
    712712            || (   (3 == cParms)
    713                 && RT_FAILURE(paParms[2].getString(&pcszFlags, &cchFlags)) /* flags */
     713                && RT_FAILURE(HGCMSvcGetCStr(&paParms[2], &pcszFlags, &cchFlags)) /* flags */
    714714               )
    715715           )
     
    825825     */
    826826    if (   (cParms == 1)  /* Hardcoded value as the next lines depend on it. */
    827         && RT_SUCCESS(paParms[0].getString(&pcszName, &cbName))  /* name */
     827        && RT_SUCCESS(HGCMSvcGetCStr(&paParms[0], &pcszName, &cbName))  /* name */
    828828       )
    829829        rc = validateName(pcszName, cbName);
     
    954954    LogFlowThisFunc(("\n"));
    955955    if (   (cParms != 3)  /* Hardcoded value as the next lines depend on it. */
    956         || RT_FAILURE(paParms[0].getString(&pchPatterns, &cbPatterns))  /* patterns */
    957         || RT_FAILURE(paParms[1].getBuffer((void **)&pchBuf, &cbBuf))  /* return buffer */
     956        || RT_FAILURE(HGCMSvcGetCStr(&paParms[0], &pchPatterns, &cbPatterns))  /* patterns */
     957        || RT_FAILURE(HGCMSvcGetBuf(&paParms[1], (void **)&pchBuf, &cbBuf))  /* return buffer */
    958958       )
    959959        rc = VERR_INVALID_PARAMETER;
     
    989989        if (RT_SUCCESS(rc))
    990990        {
    991             paParms[2].setUInt32((uint32_t)(EnumData.cbNeeded + 4));
     991            HGCMSvcSetU32(&paParms[2], (uint32_t)(EnumData.cbNeeded + 4));
    992992            if (EnumData.cbLeft >= 4)
    993993            {
     
    10481048    uint32_t cbBuf;
    10491049
    1050     int rc = paParms[2].getBuffer((void **)&pchBuf, &cbBuf);
     1050    int rc = HGCMSvcGetBuf(&paParms[2], (void **)&pchBuf, &cbBuf);
    10511051    if (RT_SUCCESS(rc))
    10521052    {
     
    10661066            if (RT_SUCCESS(rc))
    10671067            {
    1068                 paParms[1].setUInt64(u64Timestamp);
    1069                 paParms[3].setUInt32((uint32_t)buffer.size());
     1068                HGCMSvcSetU64(&paParms[1], u64Timestamp);
     1069                HGCMSvcSetU32(&paParms[3], (uint32_t)buffer.size());
    10701070                if (buffer.size() <= cbBuf)
    10711071                    buffer.copy(pchBuf, cbBuf);
     
    11051105    LogFlowThisFunc(("\n"));
    11061106    if (   cParms != 4  /* Hardcoded value as the next lines depend on it. */
    1107         || RT_FAILURE(paParms[0].getString(&pszPatterns, &cchPatterns))  /* patterns */
    1108         || RT_FAILURE(paParms[1].getUInt64(&u64Timestamp))  /* timestamp */
    1109         || RT_FAILURE(paParms[2].getBuffer((void **)&pchBuf, &cbBuf))  /* return buffer */
     1107        || RT_FAILURE(HGCMSvcGetStr(&paParms[0], &pszPatterns, &cchPatterns))  /* patterns */
     1108        || RT_FAILURE(HGCMSvcGetU64(&paParms[1], &u64Timestamp))  /* timestamp */
     1109        || RT_FAILURE(HGCMSvcGetBuf(&paParms[2], (void **)&pchBuf, &cbBuf))  /* return buffer */
    11101110       )
    11111111        rc = VERR_INVALID_PARAMETER;
     
    11351135                    const char *pszPatternsExisting;
    11361136                    uint32_t cchPatternsExisting;
    1137                     int rc3 = it->mParms[0].getString(&pszPatternsExisting, &cchPatternsExisting);
     1137                    int rc3 = HGCMSvcGetCStr(&it->mParms[0], &pszPatternsExisting, &cchPatternsExisting);
    11381138
    11391139                    if (   RT_SUCCESS(rc3)
     
    12131213            const char *pszPatterns;
    12141214            uint32_t cchPatterns;
    1215             it->mParms[0].getString(&pszPatterns, &cchPatterns);
     1215            HGCMSvcGetCStr(&it->mParms[0], &pszPatterns, &cchPatterns);
    12161216            if (prop.Matches(pszPatterns))
    12171217            {
     
    15291529                {
    15301530                    uint32_t fFlags;
    1531                     rc = paParms[0].getUInt32(&fFlags);
     1531                    rc = HGCMSvcGetU32(&paParms[0], &fFlags);
    15321532                    if (RT_SUCCESS(rc))
    15331533                        mfGlobalFlags = fFlags;
  • trunk/src/VBox/HostServices/GuestProperties/testcase/tstGuestPropSvc.cpp

    r75500 r75737  
    225225
    226226    VBOXHGCMSVCPARM aParms[4];
    227     aParms[0].setPointer((void *)g_apcszNameBlock, 0);
    228     aParms[1].setPointer((void *)g_apcszValueBlock, 0);
    229     aParms[2].setPointer((void *)g_au64TimestampBlock, 0);
    230     aParms[3].setPointer((void *)g_apcszFlagsBlock, 0);
     227    HGCMSvcSetPv(&aParms[0], (void *)g_apcszNameBlock, 0);
     228    HGCMSvcSetPv(&aParms[1], (void *)g_apcszValueBlock, 0);
     229    HGCMSvcSetPv(&aParms[2], (void *)g_au64TimestampBlock, 0);
     230    HGCMSvcSetPv(&aParms[3], (void *)g_apcszFlagsBlock, 0);
    231231    RTTESTI_CHECK_RC(ptable->pfnHostCall(ptable->pvService, GUEST_PROP_FN_HOST_SET_PROPS, 4, &aParms[0]), VINF_SUCCESS);
    232232}
     
    337337
    338338        /* Check that we get buffer overflow with a too small buffer. */
    339         aParms[0].setPointer((void *)g_aEnumStrings[i].pszPatterns, g_aEnumStrings[i].cchPatterns);
    340         aParms[1].setPointer((void *)abBuffer, g_aEnumStrings[i].cbBuffer - 1);
     339        HGCMSvcSetPv(&aParms[0], (void *)g_aEnumStrings[i].pszPatterns, g_aEnumStrings[i].cchPatterns);
     340        HGCMSvcSetPv(&aParms[1], (void *)abBuffer, g_aEnumStrings[i].cbBuffer - 1);
    341341        memset(abBuffer, 0x55, sizeof(abBuffer));
    342342        int rc2 = ptable->pfnHostCall(ptable->pvService, GUEST_PROP_FN_HOST_ENUM_PROPS, 3, aParms);
     
    344344        {
    345345            uint32_t cbNeeded;
    346             RTTESTI_CHECK_RC(rc2 = aParms[2].getUInt32(&cbNeeded), VINF_SUCCESS);
     346            RTTESTI_CHECK_RC(rc2 = HGCMSvcGetU32(&aParms[2], &cbNeeded), VINF_SUCCESS);
    347347            if (RT_SUCCESS(rc2))
    348348                RTTESTI_CHECK_MSG(cbNeeded == g_aEnumStrings[i].cbBuffer,
     
    353353
    354354        /* Make a successfull call. */
    355         aParms[0].setPointer((void *)g_aEnumStrings[i].pszPatterns, g_aEnumStrings[i].cchPatterns);
    356         aParms[1].setPointer((void *)abBuffer, g_aEnumStrings[i].cbBuffer);
     355        HGCMSvcSetPv(&aParms[0], (void *)g_aEnumStrings[i].pszPatterns, g_aEnumStrings[i].cchPatterns);
     356        HGCMSvcSetPv(&aParms[1], (void *)abBuffer, g_aEnumStrings[i].cbBuffer);
    357357        memset(abBuffer, 0x55, sizeof(abBuffer));
    358358        rc2 = ptable->pfnHostCall(ptable->pvService, GUEST_PROP_FN_HOST_ENUM_PROPS, 3, aParms);
     
    416416    RTStrPrintf(szValue, sizeof(szValue), "%s", pcszValue);
    417417    RTStrPrintf(szFlags, sizeof(szFlags), "%s", pcszFlags);
    418     aParms[0].setString(szName);
    419     aParms[1].setString(szValue);
    420     aParms[2].setString(szFlags);
     418    HGCMSvcSetStr(&aParms[0], szName);
     419    HGCMSvcSetStr(&aParms[1], szValue);
     420    HGCMSvcSetStr(&aParms[2], szFlags);
    421421    if (isHost)
    422422        callHandle.rc = pTable->pfnHostCall(pTable->pvService, command,
     
    505505        command = GUEST_PROP_FN_HOST_DEL_PROP;
    506506    VBOXHGCMSVCPARM aParms[1];
    507     aParms[0].setString(pcszName);
     507    HGCMSvcSetStr(&aParms[0], pcszName);
    508508    if (isHost)
    509509        callHandle.rc = pTable->pfnHostCall(pTable->pvService, command, 1, aParms);
     
    606606        RTTESTI_CHECK_RETV(s_aGetProperties[i].cchValue < sizeof(szBuffer));
    607607
    608         aParms[0].setString(s_aGetProperties[i].pcszName);
     608        HGCMSvcSetStr(&aParms[0], s_aGetProperties[i].pcszName);
    609609        memset(szBuffer, 0x55, sizeof(szBuffer));
    610         aParms[1].setPointer(szBuffer, sizeof(szBuffer));
     610        HGCMSvcSetPv(&aParms[1], szBuffer, sizeof(szBuffer));
    611611        int rc2 = pTable->pfnHostCall(pTable->pvService, GUEST_PROP_FN_HOST_GET_PROP, 4, aParms);
    612612
     
    630630
    631631            uint32_t u32ValueLen = UINT32_MAX;
    632             RTTESTI_CHECK_RC(rc2 = aParms[3].getUInt32(&u32ValueLen), VINF_SUCCESS);
     632            RTTESTI_CHECK_RC(rc2 = HGCMSvcGetU32(&aParms[3], &u32ValueLen), VINF_SUCCESS);
    633633            if (RT_SUCCESS(rc2))
    634634            {
     
    643643            {
    644644                uint64_t u64Timestamp = UINT64_MAX;
    645                 RTTESTI_CHECK_RC(rc2 = aParms[2].getUInt64(&u64Timestamp), VINF_SUCCESS);
     645                RTTESTI_CHECK_RC(rc2 = HGCMSvcGetU64(&aParms[2], &u64Timestamp), VINF_SUCCESS);
    646646                if (u64Timestamp != s_aGetProperties[i].u64Timestamp)
    647647                    RTTestIFailed("Bad timestamp %llu for property '%s', expected %llu.",
     
    700700        memset(pvBuf, 0x55, cbBuf);
    701701
    702         aParms[0].setPointer((void *)s_szPattern, sizeof(s_szPattern));
    703         aParms[1].setUInt64(1);
    704         aParms[2].setPointer(pvBuf, cbBuf);
     702        HGCMSvcSetPv(&aParms[0], (void *)s_szPattern, sizeof(s_szPattern));
     703        HGCMSvcSetU64(&aParms[1], 1);
     704        HGCMSvcSetPv(&aParms[2], pvBuf, cbBuf);
    705705        pTable->pfnCall(pTable->pvService, &callHandle, 0, NULL, GUEST_PROP_FN_GET_NOTIFICATION, 4, aParms, 0);
    706706
    707707        if (   callHandle.rc != VERR_BUFFER_OVERFLOW
    708             || RT_FAILURE(aParms[3].getUInt32(&cbRetNeeded))
     708            || RT_FAILURE(HGCMSvcGetU32(&aParms[3], &cbRetNeeded))
    709709            || cbRetNeeded != g_aGetNotifications[0].cbBuffer
    710710           )
     
    726726        memset(pvBuf, 0x55, cbBuf);
    727727
    728         aParms[0].setPointer((void *)s_szPattern, sizeof(s_szPattern));
    729         aParms[1].setUInt64(u64Timestamp);
    730         aParms[2].setPointer(pvBuf, cbBuf);
     728        HGCMSvcSetPv(&aParms[0], (void *)s_szPattern, sizeof(s_szPattern));
     729        HGCMSvcSetU64(&aParms[1], u64Timestamp);
     730        HGCMSvcSetPv(&aParms[2], pvBuf, cbBuf);
    731731        pTable->pfnCall(pTable->pvService, &callHandle, 0, NULL, GUEST_PROP_FN_GET_NOTIFICATION, 4, aParms, 0);
    732732        if (   RT_FAILURE(callHandle.rc)
    733733            || (i == 0 && callHandle.rc != VWRN_NOT_FOUND)
    734             || RT_FAILURE(aParms[1].getUInt64(&u64Timestamp))
    735             || RT_FAILURE(aParms[3].getUInt32(&cbRetNeeded))
     734            || RT_FAILURE(HGCMSvcGetU64(&aParms[1], &u64Timestamp))
     735            || RT_FAILURE(HGCMSvcGetU32(&aParms[3], &cbRetNeeded))
    736736            || cbRetNeeded != g_aGetNotifications[i].cbBuffer
    737737            || memcmp(pvBuf, g_aGetNotifications[i].pchBuffer, cbRetNeeded) != 0
     
    764764    static char s_szPattern[] = "";
    765765
    766     g_AsyncNotification.aParms[0].setPointer((void *)s_szPattern, sizeof(s_szPattern));
    767     g_AsyncNotification.aParms[1].setUInt64(0);
    768     g_AsyncNotification.aParms[2].setPointer((void *)g_AsyncNotification.abBuffer,
     766    HGCMSvcSetPv(&g_AsyncNotification.aParms[0], (void *)s_szPattern, sizeof(s_szPattern));
     767    HGCMSvcSetU64(&g_AsyncNotification.aParms[1], 0);
     768    HGCMSvcSetPv(&g_AsyncNotification.aParms[2], (void *)g_AsyncNotification.abBuffer,
    769769                                             sizeof(g_AsyncNotification.abBuffer));
    770770    g_AsyncNotification.callHandle.rc = VINF_HGCM_ASYNC_EXECUTE;
     
    786786    uint32_t u32Size;
    787787    if (   g_AsyncNotification.callHandle.rc != VINF_SUCCESS
    788         || RT_FAILURE(g_AsyncNotification.aParms[1].getUInt64(&u64Timestamp))
    789         || RT_FAILURE(g_AsyncNotification.aParms[3].getUInt32(&u32Size))
     788        || RT_FAILURE(HGCMSvcGetU64(&g_AsyncNotification.aParms[1], &u64Timestamp))
     789        || RT_FAILURE(HGCMSvcGetU32(&g_AsyncNotification.aParms[3], &u32Size))
    790790        || u32Size != g_aGetNotifications[0].cbBuffer
    791791        || memcmp(g_AsyncNotification.abBuffer, g_aGetNotifications[0].pchBuffer, u32Size) != 0
     
    834834{
    835835    VBOXHGCMSVCPARM paParm;
    836     paParm.setUInt32(fFlags);
     836    HGCMSvcSetU32(&paParm, fFlags);
    837837    int rc = pTable->pfnHostCall(pTable->pvService, GUEST_PROP_FN_HOST_SET_GLOBAL_FLAGS, 1, &paParm);
    838838    if (RT_FAILURE(rc))
     
    10181018
    10191019            VBOXHGCMSVCPARM aParms[4];
    1020             aParms[0].setString(s_szProp);
    1021             aParms[1].setPointer(pvBuf, cbBuf);
     1020            HGCMSvcSetStr(&aParms[0], s_szProp);
     1021            HGCMSvcSetPv(&aParms[1], pvBuf, cbBuf);
    10221022            svcTable.pfnHostCall(svcTable.pvService, GUEST_PROP_FN_HOST_GET_PROP, RT_ELEMENTS(aParms), aParms);
    10231023
     
    10541054
    10551055            VBOXHGCMSVCPARM aParms[3];
    1056             aParms[0].setString("*");
    1057             aParms[1].setPointer(pvBuf, cbBuf);
     1056            HGCMSvcSetStr(&aParms[0], "*");
     1057            HGCMSvcSetPv(&aParms[1], pvBuf, cbBuf);
    10581058            svcTable.pfnHostCall(svcTable.pvService, GUEST_PROP_FN_HOST_ENUM_PROPS, RT_ELEMENTS(aParms), aParms);
    10591059
     
    11231123            VBOXHGCMSVCPARM aParms[4];
    11241124            char            szBuffer[256];
    1125             aParms[0].setPointer(szProp, (uint32_t)cchProp + 1);
    1126             aParms[1].setPointer(szBuffer, sizeof(szBuffer));
     1125            HGCMSvcSetPv(&aParms[0], szProp, (uint32_t)cchProp + 1);
     1126            HGCMSvcSetPv(&aParms[1], szBuffer, sizeof(szBuffer));
    11271127            RTTESTI_CHECK_RC_BREAK(svcTable.pfnHostCall(svcTable.pvService, GUEST_PROP_FN_HOST_GET_PROP, 4, aParms), VINF_SUCCESS);
    11281128        }
Note: See TracChangeset for help on using the changeset viewer.

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