Lines Matching refs:pThread

246  * @param   pThread             The thread.
250 static int rtReqPoolThreadExit(PRTREQPOOLINT pPool, PRTREQPOOLTHREAD pThread, bool fLocked)
256 if (!RTListIsEmpty(&pThread->IdleNode))
258 RTListNodeRemove(&pThread->IdleNode);
264 RTListNodeRemove(&pThread->ListNode);
270 PRTREQINT pReq = pThread->pTodoReq;
274 pThread->pTodoReq = NULL;
295 * @param pThread The worker thread.
298 static void rtReqPoolThreadProcessRequest(PRTREQPOOLINT pPool, PRTREQPOOLTHREAD pThread, PRTREQINT pReq)
303 pThread->uProcessingNanoTs = RTTimeNanoTS();
304 pThread->uPendingNanoTs = pReq->uSubmitNanoTs;
305 pThread->pPendingReq = pReq;
318 pThread->pPendingReq = NULL;
320 pThread->cNsTotalReqProcessing += uNsTsEnd - pThread->uProcessingNanoTs;
321 pThread->cNsTotalReqQueued += pThread->uProcessingNanoTs - pThread->uPendingNanoTs;
322 pThread->cReqProcessed++;
336 PRTREQPOOLTHREAD pThread = (PRTREQPOOLTHREAD)pvArg;
337 PRTREQPOOLINT pPool = pThread->pPool;
353 PRTREQINT pReq = ASMAtomicXchgPtrT(&pThread->pTodoReq, NULL, PRTREQINT);
356 Assert(RTListIsEmpty(&pThread->IdleNode)); /* Must not be in the idle list. */
357 rtReqPoolThreadProcessRequest(pPool, pThread, pReq);
365 if (cReqPrevProcessedStat != pThread->cReqProcessed)
367 pPool->cReqProcessed += pThread->cReqProcessed - cReqPrevProcessedStat;
368 cReqPrevProcessedStat = pThread->cReqProcessed;
369 pPool->cNsTotalReqProcessing += pThread->cNsTotalReqProcessing - cNsPrevTotalReqProcessing;
370 cNsPrevTotalReqProcessing = pThread->cNsTotalReqProcessing;
371 pPool->cNsTotalReqQueued += pThread->cNsTotalReqQueued - cNsPrevTotalReqQueued;
372 cNsPrevTotalReqQueued = pThread->cNsTotalReqQueued;
376 pReq = ASMAtomicXchgPtrT(&pThread->pTodoReq, NULL, PRTREQINT);
379 Assert(RTListIsEmpty(&pThread->IdleNode)); /* Must not be in the idle list. */
382 rtReqPoolThreadProcessRequest(pPool, pThread, pReq);
397 if (!RTListIsEmpty(&pThread->IdleNode))
399 RTListNodeRemove(&pThread->IdleNode);
400 RTListInit(&pThread->IdleNode);
406 rtReqPoolThreadProcessRequest(pPool, pThread, pReq);
413 if (cReqPrevProcessedIdle != pThread->cReqProcessed)
415 cReqPrevProcessedIdle = pThread->cReqProcessed;
416 pThread->uIdleNanoTs = RTTimeNanoTS();
420 uint64_t cNsIdle = RTTimeNanoTS() - pThread->uIdleNanoTs;
422 return rtReqPoolThreadExit(pPool, pThread, true /*fLocked*/);
425 if (RTListIsEmpty(&pThread->IdleNode))
426 RTListPrepend(&pPool->IdleThreads, &pThread->IdleNode);
437 return rtReqPoolThreadExit(pPool, pThread, false /*fLocked*/);
449 PRTREQPOOLTHREAD pThread = (PRTREQPOOLTHREAD)RTMemAllocZ(sizeof(RTREQPOOLTHREAD));
450 if (!pThread)
453 pThread->uBirthNanoTs = RTTimeNanoTS();
454 pThread->pPool = pPool;
455 pThread->idLastCpu = NIL_RTCPUID;
456 pThread->hThread = NIL_RTTHREAD;
457 RTListInit(&pThread->IdleNode);
458 RTListAppend(&pPool->WorkerThreads, &pThread->ListNode);
462 int rc = RTThreadCreateF(&pThread->hThread, rtReqPoolThreadProc, pThread, 0 /*default stack size*/,
465 pPool->uLastThreadCreateNanoTs = pThread->uBirthNanoTs;
469 RTListNodeRemove(&pThread->ListNode);
470 RTMemFree(pThread);
534 PRTREQPOOLTHREAD pThread = RTListGetFirst(&pPool->IdleThreads, RTREQPOOLTHREAD, IdleNode);
535 if (pThread)
538 ASMAtomicWritePtr(&pThread->pTodoReq, pReq);
540 RTListNodeRemove(&pThread->IdleNode);
541 RTListInit(&pThread->IdleNode);
544 RTThreadUserSignal(pThread->hThread);
851 PRTREQPOOLTHREAD pThread;
852 RTListForEach(&pPool->WorkerThreads, pThread, RTREQPOOLTHREAD, ListNode)
854 RTThreadUserSignal(pThread->hThread);
999 PRTREQPOOLTHREAD pThread;
1000 RTListForEach(&pPool->WorkerThreads, pThread, RTREQPOOLTHREAD, ListNode)
1002 Assert(pThread->hThread != hSelf);
1003 RTThreadUserSignal(pThread->hThread);