15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * pthread_cond_signal.c 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Description: 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * This translation unit implements condition variables and their primitives. 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * -------------------------------------------------------------------------- 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Pthreads-win32 - POSIX Threads Library for Win32 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Copyright(C) 1998 John E. Bossom 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Copyright(C) 1999,2005 Pthreads-win32 contributors 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Contact Email: rpj@callisto.canberra.edu.au 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * The current list of contributors is contained 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * in the file CONTRIBUTORS included with the source 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * code distribution. The list can also be seen at the 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * following World Wide Web location: 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * http://sources.redhat.com/pthreads-win32/contributors.html 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * This library is free software; you can redistribute it and/or 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * modify it under the terms of the GNU Lesser General Public 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * License as published by the Free Software Foundation; either 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * version 2 of the License, or (at your option) any later version. 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * This library is distributed in the hope that it will be useful, 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * but WITHOUT ANY WARRANTY; without even the implied warranty of 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Lesser General Public License for more details. 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * You should have received a copy of the GNU Lesser General Public 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * License along with this library in the file COPYING.LIB; 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * if not, write to the Free Software Foundation, Inc., 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * ------------------------------------------------------------- 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Algorithm: 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * See the comments at the top of pthread_cond_wait.c. 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "pthread.h" 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "implement.h" 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static INLINE int 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ptw32_cond_unblock (pthread_cond_t * cond, int unblockAll) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Notes. 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Does not use the external mutex for synchronisation, 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * therefore semBlockLock is needed. 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * mtxUnblockLock is for LEVEL-2 synch. LEVEL-2 is the 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * state where the external mutex is not necessarily locked by 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * any thread, ie. between cond_wait unlocking and re-acquiring 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * the lock after having been signaled or a timeout or 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * cancellation. 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Uses the following CV elements: 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * nWaitersBlocked 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * nWaitersToUnblock 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * nWaitersGone 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * mtxUnblockLock 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * semBlockLock 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * semBlockQueue 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int result; 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pthread_cond_t cv; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int nSignalsToIssue; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (cond == NULL || *cond == NULL) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return EINVAL; 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cv = *cond; 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * No-op if the CV is static and hasn't been initialised yet. 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Assuming that any race condition is harmless. 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (cv == PTHREAD_COND_INITIALIZER) 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 0; 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((result = pthread_mutex_lock (&(cv->mtxUnblockLock))) != 0) 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return result; 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (0 != cv->nWaitersToUnblock) 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (0 == cv->nWaitersBlocked) 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return pthread_mutex_unlock (&(cv->mtxUnblockLock)); 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (unblockAll) 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cv->nWaitersToUnblock += (nSignalsToIssue = cv->nWaitersBlocked); 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cv->nWaitersBlocked = 0; 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nSignalsToIssue = 1; 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cv->nWaitersToUnblock++; 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cv->nWaitersBlocked--; 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if (cv->nWaitersBlocked > cv->nWaitersGone) 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* Use the non-cancellable version of sem_wait() */ 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ptw32_semwait (&(cv->semBlockLock)) != 0) 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) result = errno; 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (void) pthread_mutex_unlock (&(cv->mtxUnblockLock)); 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return result; 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (0 != cv->nWaitersGone) 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cv->nWaitersBlocked -= cv->nWaitersGone; 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cv->nWaitersGone = 0; 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (unblockAll) 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nSignalsToIssue = cv->nWaitersToUnblock = cv->nWaitersBlocked; 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cv->nWaitersBlocked = 0; 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nSignalsToIssue = cv->nWaitersToUnblock = 1; 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cv->nWaitersBlocked--; 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return pthread_mutex_unlock (&(cv->mtxUnblockLock)); 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((result = pthread_mutex_unlock (&(cv->mtxUnblockLock))) == 0) 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (sem_post_multiple (&(cv->semBlockQueue), nSignalsToIssue) != 0) 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) result = errno; 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return result; 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} /* ptw32_cond_unblock */ 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)pthread_cond_signal (pthread_cond_t * cond) 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * ------------------------------------------------------ 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * DOCPUBLIC 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * This function signals a condition variable, waking 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * one waiting thread. 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * If SCHED_FIFO or SCHED_RR policy threads are waiting 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * the highest priority waiter is awakened; otherwise, 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * an unspecified waiter is awakened. 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * PARAMETERS 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * cond 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * pointer to an instance of pthread_cond_t 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * DESCRIPTION 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * This function signals a condition variable, waking 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * one waiting thread. 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * If SCHED_FIFO or SCHED_RR policy threads are waiting 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * the highest priority waiter is awakened; otherwise, 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * an unspecified waiter is awakened. 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * NOTES: 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 1) Use when any waiter can respond and only one need 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * respond (all waiters being equal). 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * RESULTS 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 0 successfully signaled condition, 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * EINVAL 'cond' is invalid, 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * ------------------------------------------------------ 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * The '0'(FALSE) unblockAll arg means unblock ONE waiter. 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (ptw32_cond_unblock (cond, 0)); 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} /* pthread_cond_signal */ 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)pthread_cond_broadcast (pthread_cond_t * cond) 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * ------------------------------------------------------ 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * DOCPUBLIC 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * This function broadcasts the condition variable, 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * waking all current waiters. 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * PARAMETERS 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * cond 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * pointer to an instance of pthread_cond_t 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * DESCRIPTION 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * This function signals a condition variable, waking 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * all waiting threads. 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * NOTES: 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 1) Use when more than one waiter may respond to 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * predicate change or if any waiting thread may 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * not be able to respond 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * RESULTS 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 0 successfully signalled condition to all 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * waiting threads, 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * EINVAL 'cond' is invalid 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * ENOSPC a required resource has been exhausted, 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * ------------------------------------------------------ 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * The TRUE unblockAll arg means unblock ALL waiters. 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (ptw32_cond_unblock (cond, PTW32_TRUE)); 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} /* pthread_cond_broadcast */ 232