VirtualBox

Ignore:
Timestamp:
Oct 9, 2023 6:36:29 PM (19 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
159422
Message:

Host services: VBoxGuestPropSvc: Improved checks when guest is subscribed to multiple properties notifications, bugref:10185.

File:
1 edited

Legend:

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

    r98103 r101395  
    12651265     * to the queue for guest notifications */
    12661266    CallList::iterator it = mGuestWaiters.begin();
    1267     if (it != mGuestWaiters.end())
     1267    while (it != mGuestWaiters.end())
    12681268    {
    12691269        const char *pszPatterns = NULL;
    12701270        uint32_t    cchPatterns;
    1271         HGCMSvcGetCStr(&it->mParms[0], &pszPatterns, &cchPatterns);
    1272 
    1273         while (it != mGuestWaiters.end())
    1274         {
    1275             if (prop.Matches(pszPatterns))
    1276             {
    1277                 int rc2 = getNotificationWriteOut(it->mParmsCnt, it->mParms, prop, !pProp);
    1278                 if (RT_SUCCESS(rc2))
    1279                     rc2 = it->mRc;
    1280                 mpHelpers->pfnCallComplete(it->mHandle, rc2);
    1281                 it = mGuestWaiters.erase(it);
    1282             }
    1283             else
    1284                 ++it;
    1285         }
     1271        int rc2;
     1272
     1273        rc2 = HGCMSvcGetCStr(&it->mParms[0], &pszPatterns, &cchPatterns);
     1274        if (RT_FAILURE(rc2))
     1275        {
     1276            LogRel(("doNotifications: failed to get match pattern for guest property notification request, rc=%Rrc\n", rc2));
     1277            mpHelpers->pfnCallComplete(it->mHandle, VERR_INVALID_PARAMETER);
     1278            it = mGuestWaiters.erase(it);
     1279        }
     1280        else if (prop.Matches(pszPatterns))
     1281        {
     1282            rc2 = getNotificationWriteOut(it->mParmsCnt, it->mParms, prop, !pProp);
     1283            if (RT_SUCCESS(rc2))
     1284                rc2 = it->mRc;
     1285            mpHelpers->pfnCallComplete(it->mHandle, rc2);
     1286            it = mGuestWaiters.erase(it);
     1287        }
     1288        else
     1289            ++it;
    12861290    }
    12871291
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