| /* | |
| * Copyright (c) 2017 Intel Corporation | |
| * | |
| * SPDX-License-Identifier: Apache-2.0 | |
| */ | |
| #include <kernel.h> | |
| #include <posix/pthread.h> | |
| #include <ksched.h> | |
| #include <wait_q.h> | |
| int pthread_barrier_wait(pthread_barrier_t *b) | |
| { | |
| int key = irq_lock(); | |
| b->count++; | |
| if (b->count >= b->max) { | |
| b->count = 0; | |
| while (!sys_dlist_is_empty(&b->wait_q)) { | |
| _ready_one_thread(&b->wait_q); | |
| } | |
| return _reschedule(key); | |
| } else { | |
| return _pend_current_thread(key, &b->wait_q, K_FOREVER); | |
| } | |
| } |