VirtualBox

Changeset 39503 in vbox


Ignore:
Timestamp:
Dec 1, 2011 9:36:44 PM (13 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
75174
Message:

RTReq: Bugfix and some more refactoring.

Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/iprt/mangling.h

    r39498 r39503  
    10161016# define RTRandU64                                      RT_MANGLER(RTRandU64)
    10171017# define RTRandU64Ex                                    RT_MANGLER(RTRandU64Ex)
    1018 # define RTReqQueueAlloc                                     RT_MANGLER(RTReqQueueAlloc)
    1019 # define RTReqQueueCall                                      RT_MANGLER(RTReqQueueCall)
    1020 # define RTReqQueueCallEx                                    RT_MANGLER(RTReqQueueCallEx)
    1021 # define RTReqQueueCallV                                     RT_MANGLER(RTReqQueueCallV)
    1022 # define RTReqQueueCallVoid                                  RT_MANGLER(RTReqQueueCallVoid)
     1018# define RTReqQueueAlloc                                RT_MANGLER(RTReqQueueAlloc)
     1019# define RTReqQueueCall                                 RT_MANGLER(RTReqQueueCall)
     1020# define RTReqQueueCallEx                               RT_MANGLER(RTReqQueueCallEx)
     1021# define RTReqQueueCallV                                RT_MANGLER(RTReqQueueCallV)
     1022# define RTReqQueueCallVoid                             RT_MANGLER(RTReqQueueCallVoid)
    10231023# define RTReqQueueCreate                               RT_MANGLER(RTReqQueueCreate)
    10241024# define RTReqQueueDestroy                              RT_MANGLER(RTReqQueueDestroy)
    10251025# define RTReqFree                                      RT_MANGLER(RTReqFree)
    1026 # define RTReqQueueIsBusy                                    RT_MANGLER(RTReqQueueIsBusy)
    1027 # define RTReqQueueProcess                                   RT_MANGLER(RTReqQueueProcess)
    1028 # define RTReqSubmit                                     RT_MANGLER(RTReqSubmit)
     1026# define RTReqQueueIsBusy                               RT_MANGLER(RTReqQueueIsBusy)
     1027# define RTReqQueueProcess                              RT_MANGLER(RTReqQueueProcess)
     1028# define RTReqSubmit                                    RT_MANGLER(RTReqSubmit)
    10291029# define RTReqWait                                      RT_MANGLER(RTReqWait)
     1030# define RTReqGetStatus                                 RT_MANGLER(RTReqGetStatus)
    10301031# define RTS3BucketsDestroy                             RT_MANGLER(RTS3BucketsDestroy)
    10311032# define RTS3Create                                     RT_MANGLER(RTS3Create)
  • trunk/include/iprt/req.h

    r39500 r39503  
    107107 * This is used to request an action in the queue handler thread.
    108108 */
     109#if defined(IN_RT) || defined(IN_RT_R3) || defined(IN_RT_R0) || defined(IN_RT_RC)
    109110typedef struct RTREQ
    110111{
     
    116117    volatile bool           fPoolOrQueue;
    117118    /** IPRT status code for the completed request. */
    118     volatile int32_t        iStatus;
     119    volatile int32_t        iStatusX;
    119120    /** Request state. */
    120121    volatile RTREQSTATE     enmState;
     
    155156    } u;
    156157} RTREQ;
     158#else
     159typedef struct RTREQ RTREQ;
     160#endif
    157161/** Pointer to an RT request packet. */
    158162typedef RTREQ *PRTREQ;
     
    375379RTDECL(int) RTReqWait(PRTREQ pReq, RTMSINTERVAL cMillies);
    376380
     381/**
     382 * Get the status of the request.
     383 *
     384 * @returns Status code in the IPRT tradition.
     385 *
     386 * @param   pReq            The request.
     387 */
     388RTDECL(int) RTReqGetStatus(PRTREQ pReq);
    377389
    378390#endif /* IN_RING3 */
  • trunk/src/VBox/Runtime/common/misc/req.cpp

    r39500 r39503  
    7878     */
    7979    pReq->enmState = RTREQSTATE_FREE;
    80     pReq->iStatus  = VERR_RT_REQUEST_STATUS_FREED;
     80    pReq->iStatusX = VERR_RT_REQUEST_STATUS_FREED;
    8181    pReq->enmType  = RTREQTYPE_INVALID;
    8282
     
    211211}
    212212RT_EXPORT_SYMBOL(RTReqWait);
     213
     214
     215RTDECL(int) RTReqGetStatus(PRTREQ pReq)
     216{
     217    AssertPtrReturn(pReq, VERR_INVALID_POINTER);
     218    AssertReturn(pReq->u32Magic == RTREQ_MAGIC, VERR_INVALID_POINTER);
     219    return pReq->iStatusX;
     220}
     221RT_EXPORT_SYMBOL(RTReqGetStatus);
     222
    213223
    214224
     
    331341     * Complete the request.
    332342     */
    333     pReq->iStatus  = rcReq;
     343    pReq->iStatusX = rcReq;
    334344    pReq->enmState = RTREQSTATE_COMPLETED;
    335345    if (pReq->fFlags & RTREQFLAGS_NO_WAIT)
  • trunk/src/VBox/Runtime/common/misc/reqqueue.cpp

    r39502 r39503  
    8282    for (unsigned i = 0; i < RT_ELEMENTS(pQueue->apReqFree); i++)
    8383    {
    84         PRTREQ pReq = (PRTREQ)ASMAtomicXchgPtr(&pQueue->apReqFree[i], NULL);
     84        PRTREQ pReq = (PRTREQ)ASMAtomicXchgPtr((void **)&pQueue->apReqFree[i], NULL);
    8585        while (pReq)
    8686        {
     
    419419            Assert(pReq->uOwner.hQueue == pQueue);
    420420            ASMAtomicWriteNullPtr(&pReq->pNext);
    421             pReq->iStatus  = VERR_RT_REQUEST_STATUS_STILL_PENDING;
     421            pReq->iStatusX = VERR_RT_REQUEST_STATUS_STILL_PENDING;
    422422            pReq->enmState = RTREQSTATE_ALLOCATED;
    423423            pReq->fFlags   = RTREQFLAGS_IPRT_STATUS;
     
    454454    pReq->fEventSemClear= true;
    455455    pReq->fPoolOrQueue  = false;
    456     pReq->iStatus       = VERR_RT_REQUEST_STATUS_STILL_PENDING;
     456    pReq->iStatusX      = VERR_RT_REQUEST_STATUS_STILL_PENDING;
    457457    pReq->enmState      = RTREQSTATE_ALLOCATED;
    458458    pReq->pNext         = NULL;
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