VirtualBox

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/r0drv/linux/semeventmulti-r0drv-linux.c

    r24956 r25720  
    6262
    6363
    64 RTDECL(int) RTSemEventMultiCreate(PRTSEMEVENTMULTI pEventMultiSem)
    65 {
     64RTDECL(int)  RTSemEventMultiCreate(PRTSEMEVENTMULTI phEventMultiSem)
     65{
     66    return RTSemEventMultiCreateEx(phEventMultiSem, 0 /*fFlags*/, NIL_RTLOCKVALCLASS, NULL);
     67}
     68
     69
     70RTDECL(int)  RTSemEventMultiCreateEx(PRTSEMEVENTMULTI phEventMultiSem, uint32_t fFlags, RTLOCKVALCLASS hClass,
     71                                     const char *pszNameFmt, ...)
     72{
     73    AssertReturn(!(fFlags & ~RTSEMEVENTMULTI_FLAGS_NO_LOCK_VAL), VERR_INVALID_PARAMETER);
     74
    6675    PRTSEMEVENTMULTIINTERNAL pThis = (PRTSEMEVENTMULTIINTERNAL)RTMemAlloc(sizeof(*pThis));
    6776    if (pThis)
     
    7079        pThis->fState   = 0;
    7180        init_waitqueue_head(&pThis->Head);
    72         *pEventMultiSem = pThis;
     81
     82        *phEventMultiSem = pThis;
    7383        return VINF_SUCCESS;
    7484    }
     
    7888
    7989
    80 RTDECL(int) RTSemEventMultiDestroy(RTSEMEVENTMULTI EventMultiSem)
     90RTDECL(int) RTSemEventMultiDestroy(RTSEMEVENTMULTI hEventMultiSem)
    8191{
    8292    /*
    8393     * Validate input.
    8494     */
    85     PRTSEMEVENTMULTIINTERNAL pThis = (PRTSEMEVENTMULTIINTERNAL)EventMultiSem;
    86     if (!pThis)
    87         return VERR_INVALID_PARAMETER;
     95    PRTSEMEVENTMULTIINTERNAL pThis = (PRTSEMEVENTMULTIINTERNAL)hEventMultiSem;
     96    if (pThis == NIL_RTSEMEVENTMULTI)
     97        return VINF_SUCCESS;
    8898    AssertPtrReturn(pThis, VERR_INVALID_PARAMETER);
    8999    AssertMsgReturn(pThis->u32Magic == RTSEMEVENTMULTI_MAGIC, ("%p u32Magic=%RX32\n", pThis, pThis->u32Magic), VERR_INVALID_PARAMETER);
     
    92102     * Invalidate it and signal the object just in case.
    93103     */
    94     ASMAtomicIncU32(&pThis->u32Magic);
     104    ASMAtomicWriteU32(&pThis->u32Magic, ~RTSEMEVENTMULTI_MAGIC);
    95105    ASMAtomicXchgU32(&pThis->fState, 0);
    96106    Assert(!waitqueue_active(&pThis->Head));
     
    102112
    103113
    104 RTDECL(int) RTSemEventMultiSignal(RTSEMEVENTMULTI EventMultiSem)
     114RTDECL(int) RTSemEventMultiSignal(RTSEMEVENTMULTI hEventMultiSem)
    105115{
    106116    /*
    107117     * Validate input.
    108118     */
    109     PRTSEMEVENTMULTIINTERNAL pThis = (PRTSEMEVENTMULTIINTERNAL)EventMultiSem;
     119    PRTSEMEVENTMULTIINTERNAL pThis = (PRTSEMEVENTMULTIINTERNAL)hEventMultiSem;
    110120    if (!pThis)
    111121        return VERR_INVALID_PARAMETER;
     
    123133
    124134
    125 RTDECL(int) RTSemEventMultiReset(RTSEMEVENTMULTI EventMultiSem)
     135RTDECL(int) RTSemEventMultiReset(RTSEMEVENTMULTI hEventMultiSem)
    126136{
    127137    /*
    128138     * Validate input.
    129139     */
    130     PRTSEMEVENTMULTIINTERNAL pThis = (PRTSEMEVENTMULTIINTERNAL)EventMultiSem;
     140    PRTSEMEVENTMULTIINTERNAL pThis = (PRTSEMEVENTMULTIINTERNAL)hEventMultiSem;
    131141    if (!pThis)
    132142        return VERR_INVALID_PARAMETER;
     
    206216
    207217
    208 RTDECL(int) RTSemEventMultiWait(RTSEMEVENTMULTI EventMultiSem, unsigned cMillies)
    209 {
    210     PRTSEMEVENTMULTIINTERNAL pThis = (PRTSEMEVENTMULTIINTERNAL)EventMultiSem;
     218RTDECL(int) RTSemEventMultiWait(RTSEMEVENTMULTI hEventMultiSem, unsigned cMillies)
     219{
     220    PRTSEMEVENTMULTIINTERNAL pThis = (PRTSEMEVENTMULTIINTERNAL)hEventMultiSem;
    211221    if (!pThis)
    212222        return VERR_INVALID_PARAMETER;
     
    221231
    222232
    223 RTDECL(int) RTSemEventMultiWaitNoResume(RTSEMEVENTMULTI EventMultiSem, unsigned cMillies)
    224 {
    225     PRTSEMEVENTMULTIINTERNAL pThis = (PRTSEMEVENTMULTIINTERNAL)EventMultiSem;
     233RTDECL(int) RTSemEventMultiWaitNoResume(RTSEMEVENTMULTI hEventMultiSem, unsigned cMillies)
     234{
     235    PRTSEMEVENTMULTIINTERNAL pThis = (PRTSEMEVENTMULTIINTERNAL)hEventMultiSem;
    226236    if (!pThis)
    227237        return VERR_INVALID_PARAMETER;
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