Lines Matching defs:pQueue

50     PRTREQQUEUEINT pQueue = (PRTREQQUEUEINT)RTMemAllocZ(sizeof(RTREQQUEUEINT));
51 if (!pQueue)
53 int rc = RTSemEventCreate(&pQueue->EventSem);
56 pQueue->u32Magic = RTREQQUEUE_MAGIC;
58 *phQueue = pQueue;
62 RTMemFree(pQueue);
75 PRTREQQUEUEINT pQueue = hQueue;
76 AssertPtrReturn(pQueue, VERR_INVALID_HANDLE);
77 AssertReturn(ASMAtomicCmpXchgU32(&pQueue->u32Magic, RTREQQUEUE_MAGIC_DEAD, RTREQQUEUE_MAGIC), VERR_INVALID_HANDLE);
79 RTSemEventDestroy(pQueue->EventSem);
80 pQueue->EventSem = NIL_RTSEMEVENT;
82 for (unsigned i = 0; i < RT_ELEMENTS(pQueue->apReqFree); i++)
84 PRTREQ pReq = (PRTREQ)ASMAtomicXchgPtr((void **)&pQueue->apReqFree[i], NULL);
93 RTMemFree(pQueue);
106 PRTREQQUEUEINT pQueue = hQueue;
107 AssertPtrReturn(pQueue, VERR_INVALID_HANDLE);
108 AssertReturn(pQueue->u32Magic == RTREQQUEUE_MAGIC, VERR_INVALID_HANDLE);
122 PRTREQ pReqs = ASMAtomicXchgPtrT(&pQueue->pReqs, NULL, PRTREQ);
125 ASMAtomicWriteBool(&pQueue->fBusy, false); /* this aint 100% perfect, but it's good enough for now... */
128 rc = RTSemEventWait(pQueue->EventSem, cMillies);
133 ASMAtomicWriteBool(&pQueue->fBusy, true);
145 Assert(pReq->uOwner.hQueue == pQueue);
217 PRTREQQUEUEINT pQueue = hQueue;
218 AssertPtrReturn(pQueue, VERR_INVALID_HANDLE);
219 AssertReturn(pQueue->u32Magic == RTREQQUEUE_MAGIC, VERR_INVALID_HANDLE);
235 int rc = RTReqQueueAlloc(pQueue, RTREQTYPE_INTERNAL, &pReq);
273 PRTREQQUEUEINT pQueue = hQueue;
274 AssertPtrReturn(pQueue, false);
276 if (ASMAtomicReadBool(&pQueue->fBusy))
278 if (ASMAtomicReadPtrT(&pQueue->pReqs, PRTREQ) != NULL)
280 if (ASMAtomicReadBool(&pQueue->fBusy))
316 static void vmr3ReqJoinFree(PRTREQQUEUEINT pQueue, PRTREQ pList)
327 const uint32_t i = pQueue->iReqFree;
328 vmr3ReqJoinFreeSub(&pQueue->apReqFree[(i + 2) % RT_ELEMENTS(pQueue->apReqFree)], pTail->pNext);
331 vmr3ReqJoinFreeSub(&pQueue->apReqFree[(i + 2 + (i == pQueue->iReqFree)) % RT_ELEMENTS(pQueue->apReqFree)], pTail->pNext);
336 vmr3ReqJoinFreeSub(&pQueue->apReqFree[(pQueue->iReqFree + 2) % RT_ELEMENTS(pQueue->apReqFree)], pList);
345 PRTREQQUEUEINT pQueue = hQueue;
346 AssertPtrReturn(pQueue, VERR_INVALID_HANDLE);
347 AssertReturn(pQueue->u32Magic == RTREQQUEUE_MAGIC, VERR_INVALID_HANDLE);
356 int cTries = RT_ELEMENTS(pQueue->apReqFree) * 2;
359 PRTREQ volatile *ppHead = &pQueue->apReqFree[ASMAtomicIncU32(&pQueue->iReqFree) % RT_ELEMENTS(pQueue->apReqFree)];
366 vmr3ReqJoinFree(pQueue, pReq->pNext);
367 ASMAtomicDecU32(&pQueue->cReqFree);
369 Assert(pReq->uOwner.hQueue == pQueue);
385 int rc = rtReqAlloc(enmType, false /*fPoolOrQueue*/, pQueue, phReq);
396 * @param pQueue The queue.
399 DECLHIDDEN(bool) rtReqQueueRecycle(PRTREQQUEUEINT pQueue, PRTREQINT pReq)
401 if ( !pQueue
402 || pQueue->cReqFree >= 128)
405 ASMAtomicIncU32(&pQueue->cReqFree);
406 PRTREQ volatile *ppHead = &pQueue->apReqFree[ASMAtomicIncU32(&pQueue->iReqFree) % RT_ELEMENTS(pQueue->apReqFree)];
421 * @param pQueue The queue.
424 DECLHIDDEN(void) rtReqQueueSubmit(PRTREQQUEUEINT pQueue, PRTREQINT pReq)
429 pNext = pQueue->pReqs;
431 ASMAtomicWriteBool(&pQueue->fBusy, true);
432 } while (!ASMAtomicCmpXchgPtr(&pQueue->pReqs, pReq, pNext));
437 RTSemEventSignal(pQueue->EventSem);