VirtualBox

Changeset 98817 in vbox


Ignore:
Timestamp:
Mar 2, 2023 1:16:17 PM (21 months ago)
Author:
vboxsync
Message:

Guest Control: Use two separate caches for UID / GID lookups, to avoid temporary string allocations. bugref:9783

Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/VBox/VBoxGuestLib.h

    r98813 r98817  
    11521152VBGLR3DECL(int) VbglR3GuestCtrlDirCbOpen(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t uRc, uint32_t uFileHandle);
    11531153VBGLR3DECL(int) VbglR3GuestCtrlDirCbClose(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t uRc);
    1154 VBGLR3DECL(int) VbglR3GuestCtrlDirCbReadEx(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t uRc, PGSTCTLDIRENTRYEX pEntry, uint32_t cbSize, char *pszUser, char *pszGroups);
     1154VBGLR3DECL(int) VbglR3GuestCtrlDirCbReadEx(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t uRc, PGSTCTLDIRENTRYEX pEntry, uint32_t cbSize, const char *pszUser, const char *pszGroups);
    11551155VBGLR3DECL(int) VbglR3GuestCtrlDirCbRead(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t uRc, PGSTCTLDIRENTRYEX pEntry, uint32_t cbSize);
    11561156VBGLR3DECL(int) VbglR3GuestCtrlDirCbRewind(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t uRc);
     
    11741174 * @{
    11751175 */
    1176 VBGLR3DECL(int) VbglR3GuestCtrlFsCbQueryInfoEx(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t uRc, PGSTCTLFSOBJINFO pObjInfo, char *pszUser, char *pszGroups);
     1176VBGLR3DECL(int) VbglR3GuestCtrlFsCbQueryInfoEx(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t uRc, PGSTCTLFSOBJINFO pObjInfo, const char *pszUser, const char *pszGroups);
    11771177VBGLR3DECL(int) VbglR3GuestCtrlFsCbQueryInfo(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t uRc, PGSTCTLFSOBJINFO pObjInfo);
    11781178VBGLR3DECL(int) VbglR3GuestCtrlFsCbCreateTemp(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t uRc, const char *pszPath);
  • trunk/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibGuestCtrl.cpp

    r98813 r98817  
    22832283 */
    22842284VBGLR3DECL(int) VbglR3GuestCtrlDirCbReadEx(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t uRc, PGSTCTLDIRENTRYEX pEntry, uint32_t cbSize,
    2285                                            char *pszUser, char *pszGroups)
     2285                                           const char *pszUser, const char *pszGroups)
    22862286{
    22872287    AssertPtrReturn(pCtx, VERR_INVALID_POINTER);
     
    26012601 */
    26022602VBGLR3DECL(int) VbglR3GuestCtrlFsCbQueryInfoEx(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t uRc, PGSTCTLFSOBJINFO pFsObjInfo,
    2603                                                char *pszUser, char *pszGroups)
     2603                                               const char *pszUser, const char *pszGroups)
    26042604{
    26052605    AssertPtrReturn(pCtx, VERR_INVALID_POINTER);
     
    26322632VBGLR3DECL(int) VbglR3GuestCtrlFsCbQueryInfo(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t uRc, PGSTCTLFSOBJINFO pFsObjInfo)
    26332633{
    2634     char szIgnored[1];
     2634    char szIgnored[1] = { 0 };
    26352635    return VbglR3GuestCtrlFsCbQueryInfoEx(pCtx, uRc, pFsObjInfo, szIgnored /* pszUser */, szIgnored /* pszGroups */);
    26362636}
  • trunk/src/VBox/Additions/common/VBoxService/VBoxServiceControl.h

    r98709 r98817  
    221221    /** How many processes do we allow keeping around at a time? */
    222222    uint32_t                        uProcsMaxKept;
    223     /** The uid/gid cache for this session. */
    224     VGSVCIDCACHE                    IdCache;
     223    /** The uid cache for this session. */
     224    VGSVCIDCACHE                    UidCache;
     225    /** The gid cache for this session. */
     226    VGSVCIDCACHE                    GidCache;
    225227} VBOXSERVICECTRLSESSION;
    226228/** Pointer to guest session. */
  • trunk/src/VBox/Additions/common/VBoxService/VBoxServiceControlSession.cpp

    r98813 r98817  
    11701170                         pDir->pszPathAbs, RT_SUCCESS(rc) ? DirEntryEx.szName : "<None>", rc);
    11711171
    1172             char *pszUser = RT_SUCCESS(rc)
    1173                           ? RTStrDup(VGSvcIdCacheGetUidName(&pSession->IdCache,
    1174                                                             DirEntryEx.Info.Attr.u.Unix.uid, DirEntryEx.szName, pDir->pszPathAbs))
    1175                           : NULL;
    1176 
    1177             char *pszGroup = RT_SUCCESS(rc)
    1178                            ? RTStrDup(VGSvcIdCacheGetGidName(&pSession->IdCache,
    1179                                                              DirEntryEx.Info.Attr.u.Unix.gid, DirEntryEx.szName, pDir->pszPathAbs))
    1180                            : NULL;
     1172            const char *pszUser  = VGSvcIdCacheGetUidName(&pSession->UidCache, DirEntryEx.Info.Attr.u.Unix.uid, DirEntryEx.szName,
     1173                                                          pDir->pszPathAbs);
     1174            const char *pszGroup = VGSvcIdCacheGetGidName(&pSession->GidCache, DirEntryEx.Info.Attr.u.Unix.gid, DirEntryEx.szName,
     1175                                                          pDir->pszPathAbs);
    11811176
    11821177            VGSvcVerbose(2, "[Dir %s] Entry '%s': %zu bytes, uid=%s (%d), gid=%s (%d)\n",
     
    11851180                         pszGroup ? pszGroup : "", DirEntryEx.Info.Attr.u.UnixGroup.gid);
    11861181
    1187             char szIgnored[] = "???";
    11881182            int rc2 = VbglR3GuestCtrlDirCbReadEx(pHostCtx, rc,
    11891183                                                 &DirEntryEx, (uint32_t)(sizeof(GSTCTLDIRENTRYEX) + cbDirEntry),
    1190                                                  pszUser ? pszUser : szIgnored, pszGroup ? pszGroup : szIgnored);
    1191             RTStrFree(pszUser);
    1192             RTStrFree(pszGroup);
    1193 
     1184                                                 pszUser, pszGroup);
    11941185            if (RT_FAILURE(rc2))
    11951186                VGSvcError("Failed to report directory read status (%Rrc), rc=%Rrc\n", rc, rc2);
     
    18591850        PGSTCTLFSOBJINFO pObjInfo = (PGSTCTLFSOBJINFO)&objInfoRuntime;
    18601851
    1861         char *pszUser = RTStrDup(  RT_SUCCESS(rc)
    1862                                  ? VGSvcIdCacheGetUidName(&pSession->IdCache, pObjInfo->Attr.u.Unix.uid, szPath, NULL /* pszRelativeTo */)
    1863                                  : "<error>");
    1864         AssertStmt(pszUser != NULL, rc = VERR_NO_MEMORY);
    1865 
    1866         char *pszGroup = RTStrDup(  RT_SUCCESS(rc)
    1867                                   ? VGSvcIdCacheGetGidName(&pSession->IdCache, pObjInfo->Attr.u.Unix.gid, szPath, NULL /* pszRelativeTo */)
    1868                                   : "<error>");
    1869         AssertStmt(pszGroup != NULL, rc = VERR_NO_MEMORY);
     1852        const char *pszUser  = VGSvcIdCacheGetUidName(&pSession->UidCache, pObjInfo->Attr.u.Unix.uid, szPath, NULL /* pszRelativeTo */);
     1853        const char *pszGroup = VGSvcIdCacheGetGidName(&pSession->GidCache, pObjInfo->Attr.u.Unix.gid, szPath, NULL /* pszRelativeTo */);
    18701854
    18711855        int rc2 = VbglR3GuestCtrlFsCbQueryInfoEx(pHostCtx, rc, pObjInfo, pszUser, pszGroup);
    1872         RTStrFree(pszUser);
    1873         RTStrFree(pszGroup);
    1874 
    18751856        if (RT_FAILURE(rc2))
    18761857        {
     
    27652746    pSession->fFlags = fFlags;
    27662747
    2767     RT_ZERO(pSession->IdCache);
     2748    RT_ZERO(pSession->UidCache);
     2749    RT_ZERO(pSession->GidCache);
    27682750
    27692751    /* Init critical section for protecting the thread lists. */
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