| 153 | |
| 154 | #if TBB_USE_ASSERT > 1 |
| 155 | void generic_scheduler::assert_task_pool_valid() const { |
| 156 | acquire_task_pool(); |
| 157 | task** tp = my_arena_slot->task_pool_ptr; |
| 158 | __TBB_ASSERT( my_arena_slot->my_task_pool_size >= min_task_pool_size, NULL ); |
| 159 | const size_t H = __TBB_load_relaxed(my_arena_slot->head); // mirror |
| 160 | const size_t T = __TBB_load_relaxed(my_arena_slot->tail); // mirror |
| 161 | __TBB_ASSERT( H <= T, NULL ); |
| 162 | for ( size_t i = 0; i < H; ++i ) |
| 163 | __TBB_ASSERT( tp[i] == poisoned_ptr, "Task pool corrupted" ); |
| 164 | for ( size_t i = H; i < T; ++i ) { |
| 165 | __TBB_ASSERT( (uintptr_t)tp[i] + 1 > 1u, "nil or invalid task pointer in the deque" ); |
| 166 | __TBB_ASSERT( tp[i]->prefix().state == task::ready || |
| 167 | tp[i]->prefix().extra_state == es_task_proxy, "task in the deque has invalid state" ); |
| 168 | } |
| 169 | for ( size_t i = T; i < my_arena_slot->my_task_pool_size; ++i ) |
| 170 | __TBB_ASSERT( tp[i] == poisoned_ptr, "Task pool corrupted" ); |
| 171 | release_task_pool(); |
| 172 | } |
| 173 | #endif /* TBB_USE_ASSERT > 1 */ |
| 174 | |
| 175 | void generic_scheduler::init_stack_info () { |
no test coverage detected