| 3562 | } |
| 3563 | |
| 3564 | std::vector<TSAction> |
| 3565 | TSContScheduleEveryOnEntirePool(TSCont contp, TSHRTime every, TSThreadPool tp) |
| 3566 | { |
| 3567 | sdk_assert(sdk_sanity_check_iocore_structure(contp) == TS_SUCCESS); |
| 3568 | |
| 3569 | /* ensure we are on a EThread */ |
| 3570 | sdk_assert(sdk_sanity_check_null_ptr((void *)this_ethread()) == TS_SUCCESS); |
| 3571 | |
| 3572 | sdk_assert(every != 0); |
| 3573 | |
| 3574 | INKContInternal *i = reinterpret_cast<INKContInternal *>(contp); |
| 3575 | |
| 3576 | // This is to allow the continuation to be scheduled on multiple threads |
| 3577 | sdk_assert(i->mutex == nullptr); |
| 3578 | |
| 3579 | EventType etype; |
| 3580 | |
| 3581 | switch (tp) { |
| 3582 | case TS_THREAD_POOL_NET: |
| 3583 | etype = ET_NET; |
| 3584 | break; |
| 3585 | case TS_THREAD_POOL_TASK: |
| 3586 | etype = ET_TASK; |
| 3587 | break; |
| 3588 | case TS_THREAD_POOL_DNS: |
| 3589 | etype = ET_DNS; |
| 3590 | break; |
| 3591 | case TS_THREAD_POOL_UDP: |
| 3592 | etype = ET_UDP; |
| 3593 | break; |
| 3594 | default: |
| 3595 | etype = ET_TASK; |
| 3596 | break; |
| 3597 | } |
| 3598 | |
| 3599 | if (ink_atomic_increment(static_cast<int *>(&i->m_event_count), eventProcessor.thread_group[etype]._count) < 0) { |
| 3600 | ink_assert(!"not reached"); |
| 3601 | } |
| 3602 | |
| 3603 | return eventProcessor.schedule_entire(i, 0, HRTIME_MSECONDS(every), etype, EVENT_INTERVAL); |
| 3604 | } |
| 3605 | |
| 3606 | TSReturnCode |
| 3607 | TSContThreadAffinitySet(TSCont contp, TSEventThread ethread) |
no test coverage detected