VirtualBox

Changeset 45874 in vbox


Ignore:
Timestamp:
May 2, 2013 12:16:42 PM (12 years ago)
Author:
vboxsync
Message:

VBoxService: More logging for property cache / user enumeration.

Location:
trunk/src/VBox/Additions/common/VBoxService
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/common/VBoxService/VBoxServicePropCache.cpp

    r44529 r45874  
    217217{
    218218    AssertPtrReturn(pCache, VERR_INVALID_POINTER);
     219    AssertPtrReturn(pszName, VERR_INVALID_POINTER);
     220
    219221    Assert(pCache->uClientID);
    220     AssertPtrReturn(pszName, VERR_INVALID_POINTER);
    221222
    222223    /*
     
    261262                /* Write the update. */
    262263                rc = vboxServicePropCacheWritePropF(pCache->uClientID, pNode->pszName, pNode->fFlags, pszValue);
    263                 VBoxServiceVerbose(4, "PropCache %p: Written \"%s\"=\"%s\" (flags: %x), rc=%Rrc\n",
     264                VBoxServiceVerbose(4, "[PropCache %p]: Written \"%s\"=\"%s\" (flags: %x), rc=%Rrc\n",
    264265                                   pCache, pNode->pszName, pszValue, pNode->fFlags, rc);
    265                 RTStrFree(pNode->pszValue);
    266                 pNode->pszValue = RTStrDup(pszValue);
    267                 if (!pNode->pszValue)
    268                     rc = VERR_NO_MEMORY;
     266                if (RT_SUCCESS(rc)) /* Only update the node's value on successful write. */
     267                {
     268                    RTStrFree(pNode->pszValue);
     269                    pNode->pszValue = RTStrDup(pszValue);
     270                    if (!pNode->pszValue)
     271                        rc = VERR_NO_MEMORY;
     272                }
    269273            }
    270274            else
     
    276280            if (pNode->pszValue) /* Did we have a value before? Then the value needs to be deleted. */
    277281            {
    278                 /* Delete property (but do not remove from cache) if not deleted yet. */
    279                 RTStrFree(pNode->pszValue);
    280                 pNode->pszValue = NULL;
    281282                rc = vboxServicePropCacheWritePropF(pCache->uClientID, pNode->pszName,
    282283                                                    0, /* Flags */ NULL /* Value */);
    283                 VBoxServiceVerbose(4, "PropCache %p: Deleted \"%s\"=\"%s\" (flags: %x), rc=%Rrc\n",
     284                VBoxServiceVerbose(4, "[PropCache %p]: Deleted \"%s\"=\"%s\" (flags: %x), rc=%Rrc\n",
    284285                                   pCache, pNode->pszName, pNode->pszValue, pNode->fFlags, rc);
     286                if (RT_SUCCESS(rc)) /* Only delete property value on successful Vbgl deletion. */
     287                {
     288                    /* Delete property (but do not remove from cache) if not deleted yet. */
     289                    RTStrFree(pNode->pszValue);
     290                    pNode->pszValue = NULL;
     291                }
    285292            }
    286293            else
     
    291298        RTCritSectLeave(&pCache->CritSect);
    292299    }
     300
     301    VBoxServiceVerbose(4, "[PropCache %p]: Updating \"%s\" resulted in rc=%Rrc\n",
     302                       pCache, pszName, rc);
    293303
    294304    /* Delete temp stuff. */
  • trunk/src/VBox/Additions/common/VBoxService/VBoxServiceVMInfo.cpp

    r45459 r45874  
    9595/** The guest property service client ID. */
    9696static uint32_t                 g_uVMInfoGuestPropSvcClientID = 0;
    97 /** Number of logged in users in OS. */
    98 static uint32_t                 g_cVMInfoLoggedInUsers = UINT32_MAX;
     97/** Number of currently logged in users in OS. */
     98static uint32_t                 g_cVMInfoLoggedInUsers = 0;
    9999/** The guest property cache. */
    100100static VBOXSERVICEVEPROPCACHE   g_VMInfoPropCache;
     101static const char              *g_pszPropCacheValLoggedInUsersList = "/VirtualBox/GuestInfo/OS/LoggedInUsersList";
     102static const char              *g_pszPropCacheValLoggedInUsers = "/VirtualBox/GuestInfo/OS/LoggedInUsers";
     103static const char              *g_pszPropCacheValNoLoggedInUsers = "/VirtualBox/GuestInfo/OS/NoLoggedInUsers";
     104static const char              *g_pszPropCacheValNetCount = "/VirtualBox/GuestInfo/Net/Count";
    101105/** The VM session ID. Changes whenever the VM is restored or reset. */
    102106static uint64_t                 g_idVMInfoSession;
     
    212216         * Declare some guest properties with flags and reset values.
    213217         */
    214         VBoxServicePropCacheUpdateEntry(&g_VMInfoPropCache, "/VirtualBox/GuestInfo/OS/LoggedInUsersList",
    215                                         VBOXSERVICEPROPCACHEFLAG_TEMPORARY | VBOXSERVICEPROPCACHEFLAG_TRANSIENT, NULL /* Delete on exit */);
    216         VBoxServicePropCacheUpdateEntry(&g_VMInfoPropCache, "/VirtualBox/GuestInfo/OS/LoggedInUsers",
    217                                         VBOXSERVICEPROPCACHEFLAG_TEMPORARY | VBOXSERVICEPROPCACHEFLAG_TRANSIENT, "0");
    218         VBoxServicePropCacheUpdateEntry(&g_VMInfoPropCache, "/VirtualBox/GuestInfo/OS/NoLoggedInUsers",
    219                                         VBOXSERVICEPROPCACHEFLAG_TEMPORARY | VBOXSERVICEPROPCACHEFLAG_TRANSIENT, "true");
    220         VBoxServicePropCacheUpdateEntry(&g_VMInfoPropCache, "/VirtualBox/GuestInfo/Net/Count",
    221                                         VBOXSERVICEPROPCACHEFLAG_TEMPORARY | VBOXSERVICEPROPCACHEFLAG_ALWAYS_UPDATE, NULL /* Delete on exit */);
     218        int rc2 = VBoxServicePropCacheUpdateEntry(&g_VMInfoPropCache, g_pszPropCacheValLoggedInUsersList,
     219                                                  VBOXSERVICEPROPCACHEFLAG_TEMPORARY | VBOXSERVICEPROPCACHEFLAG_TRANSIENT, NULL /* Delete on exit */);
     220        if (RT_FAILURE(rc2))
     221            VBoxServiceError("Failed to init property cache value \"%s\", rc=%Rrc\n", g_pszPropCacheValLoggedInUsersList, rc2);
     222
     223        rc2 = VBoxServicePropCacheUpdateEntry(&g_VMInfoPropCache, g_pszPropCacheValLoggedInUsers,
     224                                              VBOXSERVICEPROPCACHEFLAG_TEMPORARY | VBOXSERVICEPROPCACHEFLAG_TRANSIENT, "0");
     225        if (RT_FAILURE(rc2))
     226            VBoxServiceError("Failed to init property cache value \"%s\", rc=%Rrc\n", g_pszPropCacheValLoggedInUsers, rc2);
     227
     228        rc2 = VBoxServicePropCacheUpdateEntry(&g_VMInfoPropCache, g_pszPropCacheValNoLoggedInUsers,
     229                                              VBOXSERVICEPROPCACHEFLAG_TEMPORARY | VBOXSERVICEPROPCACHEFLAG_TRANSIENT, "true");
     230        if (RT_FAILURE(rc2))
     231            VBoxServiceError("Failed to init property cache value \"%s\", rc=%Rrc\n", g_pszPropCacheValNoLoggedInUsers, rc2);
     232
     233        rc2 = VBoxServicePropCacheUpdateEntry(&g_VMInfoPropCache, g_pszPropCacheValNetCount,
     234                                              VBOXSERVICEPROPCACHEFLAG_TEMPORARY | VBOXSERVICEPROPCACHEFLAG_ALWAYS_UPDATE, NULL /* Delete on exit */);
     235        if (RT_FAILURE(rc2))
     236            VBoxServiceError("Failed to init property cache value \"%s\", rc=%Rrc\n", g_pszPropCacheValNetCount, rc2);
    222237    }
    223238    return rc;
     
    676691    }
    677692
    678     if (   pConnection 
     693    if (   pConnection
    679694        && dbus_error_is_set(&dbErr))
    680695        dbus_error_free(&dbErr);
     
    728743            static int s_iVMInfoBitchedOOM = 0;
    729744            if (s_iVMInfoBitchedOOM++ < 3)
    730                 VBoxServiceVerbose(0, "Warning: Not enough memory available to enumerate users! Keeping old value (%u)\n",
     745                VBoxServiceVerbose(0, "Warning: Not enough memory available to enumerate users! Keeping old value (%RU32)\n",
    731746                                   g_cVMInfoLoggedInUsers);
    732747            cUsersInList = g_cVMInfoLoggedInUsers;
     
    735750            cUsersInList = 0;
    736751    }
     752    else /* Preserve logged in users count. */
     753        g_cVMInfoLoggedInUsers = cUsersInList;
    737754
    738755    VBoxServiceVerbose(4, "cUsersInList=%RU32, pszUserList=%s, rc=%Rrc\n",
    739756                       cUsersInList, pszUserList ? pszUserList : "<NULL>", rc);
    740757
    741     if (pszUserList && cUsersInList > 0)
    742         rc = VBoxServicePropCacheUpdate(&g_VMInfoPropCache, "/VirtualBox/GuestInfo/OS/LoggedInUsersList", "%s", pszUserList);
     758    if (pszUserList)
     759    {
     760        AssertMsg(cUsersInList, ("pszUserList contains users whereas cUsersInList is 0\n"));
     761        rc = VBoxServicePropCacheUpdate(&g_VMInfoPropCache, g_pszPropCacheValLoggedInUsersList, "%s", pszUserList);
     762    }
    743763    else
    744         rc = VBoxServicePropCacheUpdate(&g_VMInfoPropCache, "/VirtualBox/GuestInfo/OS/LoggedInUsersList", NULL);
     764        rc = VBoxServicePropCacheUpdate(&g_VMInfoPropCache, g_pszPropCacheValLoggedInUsersList, NULL);
    745765    if (RT_FAILURE(rc))
    746     {
    747         VBoxServiceError("Error writing logged on users list, rc=%Rrc\n", rc);
    748         cUsersInList = 0; /* Reset user count on error. */
    749     }
    750 
    751     rc = VBoxServicePropCacheUpdate(&g_VMInfoPropCache, "/VirtualBox/GuestInfo/OS/LoggedInUsers", "%u", cUsersInList);
     766        VBoxServiceError("Error writing logged in users list, rc=%Rrc\n", rc);
     767
     768    rc = VBoxServicePropCacheUpdate(&g_VMInfoPropCache, g_pszPropCacheValLoggedInUsers, "%RU32", cUsersInList);
    752769    if (RT_FAILURE(rc))
    753     {
    754         VBoxServiceError("Error writing logged on users count, rc=%Rrc\n", rc);
    755         cUsersInList = 0; /* Reset user count on error. */
    756     }
    757 
    758     if (g_cVMInfoLoggedInUsers != cUsersInList)
    759     {
    760         rc = VBoxServicePropCacheUpdate(&g_VMInfoPropCache, "/VirtualBox/GuestInfo/OS/NoLoggedInUsers",
    761                                         cUsersInList == 0 ? "true" : "false");
    762         if (RT_FAILURE(rc))
    763             VBoxServiceError("Error writing no logged in users beacon, rc=%Rrc\n", rc);
    764         g_cVMInfoLoggedInUsers = cUsersInList;
    765     }
     770        VBoxServiceError("Error writing logged in users count, rc=%Rrc\n", rc);
     771
     772    rc = VBoxServicePropCacheUpdate(&g_VMInfoPropCache, g_pszPropCacheValNoLoggedInUsers,
     773                                    cUsersInList == 0 ? "true" : "false");
     774    if (RT_FAILURE(rc))
     775        VBoxServiceError("Error writing no logged in users beacon, rc=%Rrc\n", rc);
     776
    766777    if (pszUserList)
    767778        RTStrFree(pszUserList);
     
    869880        char szIp[32];
    870881        RTStrPrintf(szIp, sizeof(szIp), "%s", inet_ntoa(pAddress->sin_addr));
    871         RTStrPrintf(szPropPath, sizeof(szPropPath), "/VirtualBox/GuestInfo/Net/%u/V4/IP", cIfacesReport);
     882        RTStrPrintf(szPropPath, sizeof(szPropPath), "/VirtualBox/GuestInfo/Net/%RU32/V4/IP", cIfacesReport);
    872883        VBoxServicePropCacheUpdate(&g_VMInfoPropCache, szPropPath, "%s", szIp);
    873884
    874885        pAddress = (sockaddr_in *) & (InterfaceList[i].iiBroadcastAddress);
    875         RTStrPrintf(szPropPath, sizeof(szPropPath), "/VirtualBox/GuestInfo/Net/%u/V4/Broadcast", cIfacesReport);
     886        RTStrPrintf(szPropPath, sizeof(szPropPath), "/VirtualBox/GuestInfo/Net/%RU32/V4/Broadcast", cIfacesReport);
    876887        VBoxServicePropCacheUpdate(&g_VMInfoPropCache, szPropPath, "%s", inet_ntoa(pAddress->sin_addr));
    877888
    878889        pAddress = (sockaddr_in *)&(InterfaceList[i].iiNetmask);
    879         RTStrPrintf(szPropPath, sizeof(szPropPath), "/VirtualBox/GuestInfo/Net/%u/V4/Netmask", cIfacesReport);
     890        RTStrPrintf(szPropPath, sizeof(szPropPath), "/VirtualBox/GuestInfo/Net/%RU32/V4/Netmask", cIfacesReport);
    880891        VBoxServicePropCacheUpdate(&g_VMInfoPropCache, szPropPath, "%s", inet_ntoa(pAddress->sin_addr));
    881892
    882         RTStrPrintf(szPropPath, sizeof(szPropPath), "/VirtualBox/GuestInfo/Net/%u/Status", cIfacesReport);
     893        RTStrPrintf(szPropPath, sizeof(szPropPath), "/VirtualBox/GuestInfo/Net/%RU32/Status", cIfacesReport);
    883894        VBoxServicePropCacheUpdate(&g_VMInfoPropCache, szPropPath, nFlags & IFF_UP ? "Up" : "Down");
    884895
     
    889900                break;
    890901
    891         RTStrPrintf(szPropPath, sizeof(szPropPath), "/VirtualBox/GuestInfo/Net/%u/MAC", cIfacesReport);
     902        RTStrPrintf(szPropPath, sizeof(szPropPath), "/VirtualBox/GuestInfo/Net/%RU32/MAC", cIfacesReport);
    892903        if (pAdp)
    893904        {
     
    940951            getnameinfo(pIfCurr->ifa_addr, sizeof(struct sockaddr_in),
    941952                        szInetAddr, NI_MAXHOST, NULL, 0, NI_NUMERICHOST);
    942             RTStrPrintf(szPropPath, sizeof(szPropPath), "/VirtualBox/GuestInfo/Net/%u/V4/IP", cIfacesReport);
     953            RTStrPrintf(szPropPath, sizeof(szPropPath), "/VirtualBox/GuestInfo/Net/%RU32/V4/IP", cIfacesReport);
    943954            VBoxServicePropCacheUpdate(&g_VMInfoPropCache, szPropPath, "%s", szInetAddr);
    944955
     
    946957            getnameinfo(pIfCurr->ifa_broadaddr, sizeof(struct sockaddr_in),
    947958                        szInetAddr, NI_MAXHOST, NULL, 0, NI_NUMERICHOST);
    948             RTStrPrintf(szPropPath, sizeof(szPropPath), "/VirtualBox/GuestInfo/Net/%u/V4/Broadcast", cIfacesReport);
     959            RTStrPrintf(szPropPath, sizeof(szPropPath), "/VirtualBox/GuestInfo/Net/%RU32/V4/Broadcast", cIfacesReport);
    949960            VBoxServicePropCacheUpdate(&g_VMInfoPropCache, szPropPath, "%s", szInetAddr);
    950961
     
    952963            getnameinfo(pIfCurr->ifa_netmask, sizeof(struct sockaddr_in),
    953964                        szInetAddr, NI_MAXHOST, NULL, 0, NI_NUMERICHOST);
    954             RTStrPrintf(szPropPath, sizeof(szPropPath), "/VirtualBox/GuestInfo/Net/%u/V4/Netmask", cIfacesReport);
     965            RTStrPrintf(szPropPath, sizeof(szPropPath), "/VirtualBox/GuestInfo/Net/%RU32/V4/Netmask", cIfacesReport);
    955966            VBoxServicePropCacheUpdate(&g_VMInfoPropCache, szPropPath, "%s", szInetAddr);
    956967
     
    969980                    RTStrPrintf(szMac, sizeof(szMac), "%02X%02X%02X%02X%02X%02X",
    970981                                pu8Mac[0], pu8Mac[1], pu8Mac[2], pu8Mac[3],  pu8Mac[4], pu8Mac[5]);
    971                     RTStrPrintf(szPropPath, sizeof(szPropPath), "/VirtualBox/GuestInfo/Net/%u/MAC", cIfacesReport);
     982                    RTStrPrintf(szPropPath, sizeof(szPropPath), "/VirtualBox/GuestInfo/Net/%RU32/MAC", cIfacesReport);
    972983                    VBoxServicePropCacheUpdate(&g_VMInfoPropCache, szPropPath, "%s", szMac);
    973984                    break;
     
    975986            }
    976987
    977             RTStrPrintf(szPropPath, sizeof(szPropPath), "/VirtualBox/GuestInfo/Net/%u/Status", cIfacesReport);
     988            RTStrPrintf(szPropPath, sizeof(szPropPath), "/VirtualBox/GuestInfo/Net/%RU32/Status", cIfacesReport);
    978989            VBoxServicePropCacheUpdate(&g_VMInfoPropCache, szPropPath, pIfCurr->ifa_flags & IFF_UP ? "Up" : "Down");
    979990
     
    10241035        pAddress = ((sockaddr_in *)&ifrequest[i].ifr_addr);
    10251036        Assert(pAddress);
    1026         RTStrPrintf(szPropPath, sizeof(szPropPath), "/VirtualBox/GuestInfo/Net/%u/V4/IP", cIfacesReport);
     1037        RTStrPrintf(szPropPath, sizeof(szPropPath), "/VirtualBox/GuestInfo/Net/%RU32/V4/IP", cIfacesReport);
    10271038        VBoxServicePropCacheUpdate(&g_VMInfoPropCache, szPropPath, "%s", inet_ntoa(pAddress->sin_addr));
    10281039
     
    10341045        }
    10351046        pAddress = (sockaddr_in *)&ifrequest[i].ifr_broadaddr;
    1036         RTStrPrintf(szPropPath, sizeof(szPropPath), "/VirtualBox/GuestInfo/Net/%u/V4/Broadcast", cIfacesReport);
     1047        RTStrPrintf(szPropPath, sizeof(szPropPath), "/VirtualBox/GuestInfo/Net/%RU32/V4/Broadcast", cIfacesReport);
    10371048        VBoxServicePropCacheUpdate(&g_VMInfoPropCache, szPropPath, "%s", inet_ntoa(pAddress->sin_addr));
    10381049
     
    10491060# endif
    10501061
    1051         RTStrPrintf(szPropPath, sizeof(szPropPath), "/VirtualBox/GuestInfo/Net/%u/V4/Netmask", cIfacesReport);
     1062        RTStrPrintf(szPropPath, sizeof(szPropPath), "/VirtualBox/GuestInfo/Net/%RU32/V4/Netmask", cIfacesReport);
    10521063        VBoxServicePropCacheUpdate(&g_VMInfoPropCache, szPropPath, "%s", inet_ntoa(pAddress->sin_addr));
    10531064
     
    11061117        RTStrPrintf(szMac, sizeof(szMac), "%02X%02X%02X%02X%02X%02X",
    11071118                    pu8Mac[0], pu8Mac[1], pu8Mac[2], pu8Mac[3],  pu8Mac[4], pu8Mac[5]);
    1108         RTStrPrintf(szPropPath, sizeof(szPropPath), "/VirtualBox/GuestInfo/Net/%u/MAC", cIfacesReport);
     1119        RTStrPrintf(szPropPath, sizeof(szPropPath), "/VirtualBox/GuestInfo/Net/%RU32/MAC", cIfacesReport);
    11091120        VBoxServicePropCacheUpdate(&g_VMInfoPropCache, szPropPath, "%s", szMac);
    11101121# endif /* !OS/2*/
    11111122
    1112         RTStrPrintf(szPropPath, sizeof(szPropPath), "/VirtualBox/GuestInfo/Net/%u/Status", cIfacesReport);
     1123        RTStrPrintf(szPropPath, sizeof(szPropPath), "/VirtualBox/GuestInfo/Net/%RU32/Status", cIfacesReport);
    11131124        VBoxServicePropCacheUpdate(&g_VMInfoPropCache, szPropPath, fIfUp ? "Up" : "Down");
    11141125        cIfacesReport++;
     
    11171128    close(sd);
    11181129    if (RT_FAILURE(rc))
    1119         VBoxServiceError("VMInfo/Network: Network enumeration for interface %u failed with error %Rrc\n", cIfacesReport, rc);
     1130        VBoxServiceError("VMInfo/Network: Network enumeration for interface %RU32 failed with error %Rrc\n", cIfacesReport, rc);
    11201131
    11211132#endif /* !RT_OS_WINDOWS */
     
    11291140    /* Get former count. */
    11301141    uint32_t cIfacesReportOld;
    1131     rc = VBoxServiceReadPropUInt32(g_uVMInfoGuestPropSvcClientID, "/VirtualBox/GuestInfo/Net/Count", &cIfacesReportOld,
     1142    rc = VBoxServiceReadPropUInt32(g_uVMInfoGuestPropSvcClientID, g_pszPropCacheValNetCount, &cIfacesReportOld,
    11321143                                   0 /* Min */, UINT32_MAX /* Max */);
    11331144    if (   RT_SUCCESS(rc)
    11341145        && cIfacesReportOld > cIfacesReport) /* Are some ifaces not around anymore? */
    11351146    {
    1136         VBoxServiceVerbose(3, "VMInfo/Network: Stale interface data detected (%u old vs. %u current)\n",
     1147        VBoxServiceVerbose(3, "VMInfo/Network: Stale interface data detected (%RU32 old vs. %RU32 current)\n",
    11371148                           cIfacesReportOld, cIfacesReport);
    11381149
     
    11411152        {
    11421153            VBoxServiceVerbose(3, "VMInfo/Network: Deleting stale data of interface %d ...\n", uIfaceDeleteIdx);
    1143             rc = VBoxServicePropCacheUpdateByPath(&g_VMInfoPropCache, NULL /* Value, delete */, 0 /* Flags */, "/VirtualBox/GuestInfo/Net/%u", uIfaceDeleteIdx++);
     1154            rc = VBoxServicePropCacheUpdateByPath(&g_VMInfoPropCache, NULL /* Value, delete */, 0 /* Flags */, "/VirtualBox/GuestInfo/Net/%RU32", uIfaceDeleteIdx++);
    11441155        } while (RT_SUCCESS(rc));
    11451156    }
     
    11561167     * properties are no longer valid.
    11571168     */
    1158     VBoxServicePropCacheUpdate(&g_VMInfoPropCache, "/VirtualBox/GuestInfo/Net/Count", "%d",
     1169    VBoxServicePropCacheUpdate(&g_VMInfoPropCache, g_pszPropCacheValNetCount, "%RU32",
    11591170                               cIfacesReport);
    11601171
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