VirtualBox

Changeset 33269 in vbox for trunk/src/VBox/Runtime/r3/win


Ignore:
Timestamp:
Oct 20, 2010 3:42:28 PM (14 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
66829
Message:

IPRT: A quick replacement of the RTMemPage* and RTMemExec* APIs on posix. (Turned out to be a bit more work than expected because of the electric fence heap and init dependencies.)

Location:
trunk/src/VBox/Runtime/r3/win
Files:
2 edited

Legend:

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

    r31158 r33269  
    7676
    7777
    78 RTDECL(void)    RTMemExecFree(void *pv) RT_NO_THROW
     78RTDECL(void)    RTMemExecFree(void *pv, size_t cb) RT_NO_THROW
    7979{
    8080    if (pv)
  • trunk/src/VBox/Runtime/r3/win/semevent-win.cpp

    r28800 r33269  
    4242#include <iprt/thread.h>
    4343#include "internal/magics.h"
     44#include "internal/mem.h"
    4445#include "internal/strict.h"
    4546
     
    6061    bool volatile       fEverHadSignallers;
    6162#endif
     63    /** The creation flags. */
     64    uint32_t            fFlags;
    6265};
    6366
     
    7275RTDECL(int)  RTSemEventCreateEx(PRTSEMEVENT phEventSem, uint32_t fFlags, RTLOCKVALCLASS hClass, const char *pszNameFmt, ...)
    7376{
    74     AssertReturn(!(fFlags & ~RTSEMEVENT_FLAGS_NO_LOCK_VAL), VERR_INVALID_PARAMETER);
    75 
    76     struct RTSEMEVENTINTERNAL *pThis = (struct RTSEMEVENTINTERNAL *)RTMemAlloc(sizeof(*pThis));
     77    AssertReturn(!(fFlags & ~(RTSEMEVENT_FLAGS_NO_LOCK_VAL | RTSEMEVENT_FLAGS_BOOTSTRAP_HACK)), VERR_INVALID_PARAMETER);
     78    Assert(!(fFlags & RTSEMEVENT_FLAGS_BOOTSTRAP_HACK) || (fFlags & RTSEMEVENT_FLAGS_NO_LOCK_VAL));
     79
     80    struct RTSEMEVENTINTERNAL *pThis;
     81    if (!(fFlags & RTSEMEVENT_FLAGS_BOOTSTRAP_HACK))
     82        pThis = (struct RTSEMEVENTINTERNAL *)RTMemAlloc(sizeof(*pThis));
     83    else
     84        pThis = (struct RTSEMEVENTINTERNAL *)rtMemBaseAlloc(sizeof(*pThis));
    7785    if (!pThis)
    7886        return VERR_NO_MEMORY;
     
    8694    {
    8795        pThis->u32Magic = RTSEMEVENT_MAGIC;
     96        pThis->fFlags   = fFlags;
    8897#ifdef RTSEMEVENT_STRICT
    8998        if (!pszNameFmt)
     
    111120
    112121    DWORD dwErr = GetLastError();
    113     RTMemFree(pThis);
     122    if (!(fFlags & RTSEMEVENT_FLAGS_BOOTSTRAP_HACK))
     123        RTMemFree(pThis);
     124    else
     125        rtMemBaseFree(pThis);
    114126    return RTErrConvertFromWin32(dwErr);
    115127}
     
    134146        RTLockValidatorRecSharedDelete(&pThis->Signallers);
    135147#endif
    136         RTMemFree(pThis);
     148        if (!(pThis->fFlags & RTSEMEVENT_FLAGS_BOOTSTRAP_HACK))
     149            RTMemFree(pThis);
     150        else
     151            rtMemBaseFree(pThis);
    137152    }
    138153    else
     
    218233     */
    219234#ifdef RTSEMEVENT_STRICT
    220     RTTHREAD hThreadSelf = RTThreadSelfAutoAdopt();
     235    RTTHREAD hThreadSelf = !(pThis->fFlags & RTSEMEVENT_FLAGS_BOOTSTRAP_HACK)
     236                         ? RTThreadSelfAutoAdopt()
     237                         : RTThreadSelf();
    221238    if (pThis->fEverHadSignallers)
    222239    {
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