VirtualBox

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


Ignore:
Timestamp:
Jan 11, 2010 1:57:09 PM (15 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
56460
Message:

iprt: Added RTSemEventMultiCreateEx and did some cleanups of the RTSemEventMultiDestroy behavior wrt NIL handles.

File:
1 edited

Legend:

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

    r25704 r25720  
    7070
    7171
    72 /* Undefine debug mappings. */
    73 #undef RTSemEventMultiWait
    74 #undef RTSemEventMultiWaitNoResume
    75 
    76 
    77 RTDECL(int)  RTSemEventMultiCreate(PRTSEMEVENTMULTI pEventMultiSem)
    78 {
     72
     73RTDECL(int)  RTSemEventMultiCreate(PRTSEMEVENTMULTI phEventMultiSem)
     74{
     75    return RTSemEventMultiCreateEx(phEventMultiSem, 0 /*fFlags*/, NIL_RTLOCKVALCLASS, NULL);
     76}
     77
     78
     79RTDECL(int)  RTSemEventMultiCreateEx(PRTSEMEVENTMULTI phEventMultiSem, uint32_t fFlags, RTLOCKVALCLASS hClass,
     80                                     const char *pszNameFmt, ...)
     81{
     82    AssertReturn(!(fFlags & ~RTSEMEVENTMULTI_FLAGS_NO_LOCK_VAL), VERR_INVALID_PARAMETER);
     83
    7984    struct RTSEMEVENTMULTIINTERNAL *pThis = (struct RTSEMEVENTMULTIINTERNAL *)RTMemAlloc(sizeof(*pThis));
    8085    if (!pThis)
     
    9095        pThis->u32Magic = RTSEMEVENTMULTI_MAGIC;
    9196#ifdef RTSEMEVENT_STRICT
    92         RTLockValidatorRecSharedInit(&pThis->Signallers,
    93                                      NIL_RTLOCKVALCLASS, RTLOCKVAL_SUB_CLASS_ANY,
    94                                      pThis, true /*fSignaller*/, true /*fEnabled*/, "RTSemEvent");
     97        va_list va;
     98        va_start(va, pszNameFmt);
     99        RTLockValidatorRecSharedInitV(&pThis->Signallers, hClass, RTLOCKVAL_SUB_CLASS_ANY, pThis,
     100                                      true /*fSignaller*/, !(fFlags & RTSEMEVENTMULTI_FLAGS_NO_LOCK_VAL),
     101                                      pszNameFmt, va);
     102        va_end(va);
    95103        pThis->fEverHadSignallers = false;
    96104#endif
    97105
    98         *pEventMultiSem = pThis;
     106        *phEventMultiSem = pThis;
    99107        return VINF_SUCCESS;
    100108    }
     
    106114
    107115
    108 RTDECL(int)  RTSemEventMultiDestroy(RTSEMEVENTMULTI EventMultiSem)
    109 {
    110     struct RTSEMEVENTMULTIINTERNAL *pThis = EventMultiSem;
     116RTDECL(int)  RTSemEventMultiDestroy(RTSEMEVENTMULTI hEventMultiSem)
     117{
     118    struct RTSEMEVENTMULTIINTERNAL *pThis = hEventMultiSem;
    111119    if (pThis == NIL_RTSEMEVENT)        /* don't bitch */
    112         return VERR_INVALID_HANDLE;
     120        return VINF_SUCCESS;
    113121    AssertPtrReturn(pThis, VERR_INVALID_HANDLE);
    114122    AssertReturn(pThis->u32Magic == RTSEMEVENTMULTI_MAGIC, VERR_INVALID_HANDLE);
     
    130138        DWORD dwErr = GetLastError();
    131139        rc = RTErrConvertFromWin32(dwErr);
    132         AssertMsgFailed(("Destroy EventMultiSem %p failed, lasterr=%u (%Rrc)\n", pThis, dwErr, rc));
     140        AssertMsgFailed(("Destroy hEventMultiSem %p failed, lasterr=%u (%Rrc)\n", pThis, dwErr, rc));
    133141        /* Leak it. */
    134142    }
     
    138146
    139147
    140 RTDECL(int)  RTSemEventMultiSignal(RTSEMEVENTMULTI EventMultiSem)
     148RTDECL(int)  RTSemEventMultiSignal(RTSEMEVENTMULTI hEventMultiSem)
    141149{
    142150    /*
    143151     * Validate input.
    144152     */
    145     struct RTSEMEVENTMULTIINTERNAL *pThis = EventMultiSem;
     153    struct RTSEMEVENTMULTIINTERNAL *pThis = hEventMultiSem;
    146154    AssertPtrReturn(pThis, VERR_INVALID_HANDLE);
    147155    AssertReturn(pThis->u32Magic == RTSEMEVENTMULTI_MAGIC, VERR_INVALID_HANDLE);
     
    162170        return VINF_SUCCESS;
    163171    DWORD dwErr = GetLastError();
    164     AssertMsgFailed(("Signaling EventMultiSem %p failed, lasterr=%d\n", pThis, dwErr));
     172    AssertMsgFailed(("Signaling hEventMultiSem %p failed, lasterr=%d\n", pThis, dwErr));
    165173    return RTErrConvertFromWin32(dwErr);
    166174}
    167175
    168176
    169 RTDECL(int)  RTSemEventMultiReset(RTSEMEVENTMULTI EventMultiSem)
     177RTDECL(int)  RTSemEventMultiReset(RTSEMEVENTMULTI hEventMultiSem)
    170178{
    171179    /*
    172180     * Validate input.
    173181     */
    174     struct RTSEMEVENTMULTIINTERNAL *pThis = EventMultiSem;
     182    struct RTSEMEVENTMULTIINTERNAL *pThis = hEventMultiSem;
    175183    AssertPtrReturn(pThis, VERR_INVALID_HANDLE);
    176184    AssertReturn(pThis->u32Magic == RTSEMEVENTMULTI_MAGIC, VERR_INVALID_HANDLE);
     
    182190        return VINF_SUCCESS;
    183191    DWORD dwErr = GetLastError();
    184     AssertMsgFailed(("Resetting EventMultiSem %p failed, lasterr=%d\n", pThis, dwErr));
     192    AssertMsgFailed(("Resetting hEventMultiSem %p failed, lasterr=%d\n", pThis, dwErr));
    185193    return RTErrConvertFromWin32(dwErr);
    186194}
     
    201209        {
    202210            int rc2 = RTErrConvertFromWin32(GetLastError());
    203             AssertMsgFailed(("Wait on EventMultiSem %p failed, rc=%d lasterr=%d\n", pThis, rc, GetLastError()));
     211            AssertMsgFailed(("Wait on hEventMultiSem %p failed, rc=%d lasterr=%d\n", pThis, rc, GetLastError()));
    204212            if (rc2)
    205213                return rc2;
     
    212220
    213221
    214 RTDECL(int)  RTSemEventMultiWaitNoResume(RTSEMEVENTMULTI EventMultiSem, unsigned cMillies)
     222#undef RTSemEventMultiWaitNoResume
     223RTDECL(int)  RTSemEventMultiWaitNoResume(RTSEMEVENTMULTI hEventMultiSem, unsigned cMillies)
    215224{
    216225    PCRTLOCKVALSRCPOS pSrcPos = NULL;
     
    219228     * Validate input.
    220229     */
    221     struct RTSEMEVENTMULTIINTERNAL *pThis = EventMultiSem;
     230    struct RTSEMEVENTMULTIINTERNAL *pThis = hEventMultiSem;
    222231    AssertPtrReturn(pThis, VERR_INVALID_HANDLE);
    223232    AssertReturn(pThis->u32Magic == RTSEMEVENTMULTI_MAGIC, VERR_INVALID_HANDLE);
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