VirtualBox

Changeset 25717 in vbox for trunk/src/VBox/Runtime/r0drv/nt


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

iprt: Added RTSemEventCreateEx and did some cleanups of the RTSemEventDestroy behavior wrt NIL handles.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/r0drv/nt/semevent-r0drv-nt.cpp

    r20929 r25717  
    5959
    6060
    61 RTDECL(int)  RTSemEventCreate(PRTSEMEVENT pEventSem)
     61RTDECL(int)  RTSemEventCreate(PRTSEMEVENT phEventSem)
    6262{
    63     Assert(sizeof(RTSEMEVENTINTERNAL) > sizeof(void *));
    64     PRTSEMEVENTINTERNAL pThis = (PRTSEMEVENTINTERNAL)RTMemAlloc(sizeof(*pThis));
    65     if (pThis)
    66     {
    67         pThis->u32Magic = RTSEMEVENT_MAGIC;
    68         KeInitializeEvent(&pThis->Event, SynchronizationEvent, FALSE);
    69         *pEventSem = pThis;
    70         return VINF_SUCCESS;
    71     }
    72     return VERR_NO_MEMORY;
     63    return RTSemEventCreateEx(phEventSem, 0 /*fFlags*/, NIL_RTLOCKVALCLASS, NULL);
    7364}
    7465
    7566
    76 RTDECL(int)  RTSemEventDestroy(RTSEMEVENT EventSem)
     67RTDECL(int)  RTSemEventCreateEx(PRTSEMEVENT phEventSem, uint32_t fFlags, RTLOCKVALCLASS hClass, const char *pszNameFmt, ...)
     68{
     69    AssertReturn(!(fFlags & ~RTSEMEVENT_FLAGS_NO_LOCK_VAL), VERR_INVALID_PARAMETER);
     70    AssertCompile(sizeof(RTSEMEVENTINTERNAL) > sizeof(void *));
     71
     72    PRTSEMEVENTINTERNAL pThis = (PRTSEMEVENTINTERNAL)RTMemAlloc(sizeof(*pThis));
     73    if (!pThis)
     74        return VERR_NO_MEMORY;
     75
     76    pThis->u32Magic = RTSEMEVENT_MAGIC;
     77    KeInitializeEvent(&pThis->Event, SynchronizationEvent, FALSE);
     78
     79    *phEventSem = pThis;
     80    return VINF_SUCCESS;
     81}
     82
     83
     84RTDECL(int)  RTSemEventDestroy(RTSEMEVENT hEventSem)
    7785{
    7886    /*
    7987     * Validate input.
    8088     */
    81     PRTSEMEVENTINTERNAL pThis = (PRTSEMEVENTINTERNAL)EventSem;
    82     if (!pThis)
    83         return VERR_INVALID_PARAMETER;
    84     if (pThis->u32Magic != RTSEMEVENT_MAGIC)
    85     {
    86         AssertMsgFailed(("pThis->u32Magic=%RX32 pThis=%p\n", pThis->u32Magic, pThis));
    87         return VERR_INVALID_PARAMETER;
    88     }
     89    PRTSEMEVENTINTERNAL pThis = hEventSem;
     90    if (pThis == NIL_RTSEMEVENT)
     91        return VINF_SUCCESS;
     92    AssertPtrReturn(pThis, VERR_INVALID_HANDLE);
     93    AssertMsgReturn(pThis->u32Magic == RTSEMEVENT_MAGIC, ("pThis->u32Magic=%RX32 pThis=%p\n", pThis->u32Magic, pThis), VERR_INVALID_HANDLE);
    8994
    9095    /*
     
    98103
    99104
    100 RTDECL(int)  RTSemEventSignal(RTSEMEVENT EventSem)
     105RTDECL(int)  RTSemEventSignal(RTSEMEVENT hEventSem)
    101106{
    102107    /*
    103108     * Validate input.
    104109     */
    105     PRTSEMEVENTINTERNAL pThis = (PRTSEMEVENTINTERNAL)EventSem;
    106     if (!pThis)
    107         return VERR_INVALID_PARAMETER;
    108     if (    !pThis
    109         ||  pThis->u32Magic != RTSEMEVENT_MAGIC)
    110     {
    111         AssertMsgFailed(("pThis->u32Magic=%RX32 pThis=%p\n", pThis ? pThis->u32Magic : 0, pThis));
    112         return VERR_INVALID_PARAMETER;
    113     }
     110    PRTSEMEVENTINTERNAL pThis = (PRTSEMEVENTINTERNAL)hEventSem;
     111    AssertPtrReturn(pThis, VERR_INVALID_HANDLE);
     112    AssertMsgReturn(pThis->u32Magic == RTSEMEVENT_MAGIC, ("pThis->u32Magic=%RX32 pThis=%p\n", pThis->u32Magic, pThis), VERR_INVALID_HANDLE);
    114113
    115114    /*
     
    121120
    122121
    123 static int rtSemEventWait(RTSEMEVENT EventSem, unsigned cMillies, bool fInterruptible)
     122static int rtSemEventWait(RTSEMEVENT hEventSem, unsigned cMillies, bool fInterruptible)
    124123{
    125124    /*
    126125     * Validate input.
    127126     */
    128     PRTSEMEVENTINTERNAL pThis = (PRTSEMEVENTINTERNAL)EventSem;
    129     if (!pThis)
    130         return VERR_INVALID_PARAMETER;
    131     if (    !pThis
    132         ||  pThis->u32Magic != RTSEMEVENT_MAGIC)
    133     {
    134         AssertMsgFailed(("pThis->u32Magic=%RX32 pThis=%p\n", pThis ? pThis->u32Magic : 0, pThis));
    135         return VERR_INVALID_PARAMETER;
    136     }
     127    PRTSEMEVENTINTERNAL pThis = (PRTSEMEVENTINTERNAL)hEventSem;
     128    AssertPtrReturn(pThis, VERR_INVALID_HANDLE);
     129    AssertMsgReturn(pThis->u32Magic == RTSEMEVENT_MAGIC, ("pThis->u32Magic=%RX32 pThis=%p\n", pThis->u32Magic, pThis), VERR_INVALID_HANDLE);
    137130
    138131    /*
     
    170163
    171164
    172 RTDECL(int)  RTSemEventWait(RTSEMEVENT EventSem, unsigned cMillies)
     165RTDECL(int)  RTSemEventWait(RTSEMEVENT hEventSem, unsigned cMillies)
    173166{
    174     return rtSemEventWait(EventSem, cMillies, false /* fInterruptible */);
     167    return rtSemEventWait(hEventSem, cMillies, false /* fInterruptible */);
    175168}
    176169
    177170
    178 RTDECL(int)  RTSemEventWaitNoResume(RTSEMEVENT EventSem, unsigned cMillies)
     171RTDECL(int)  RTSemEventWaitNoResume(RTSEMEVENT hEventSem, unsigned cMillies)
    179172{
    180     return rtSemEventWait(EventSem, cMillies, true /* fInterruptible */);
     173    return rtSemEventWait(hEventSem, cMillies, true /* fInterruptible */);
    181174}
    182175
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