1*062c5bc4SJason Schmidlapp /* 2*062c5bc4SJason Schmidlapp * global.c 3*062c5bc4SJason Schmidlapp * 4*062c5bc4SJason Schmidlapp * Description: 5*062c5bc4SJason Schmidlapp * This translation unit instantiates data associated with the implementation 6*062c5bc4SJason Schmidlapp * as a whole. 7*062c5bc4SJason Schmidlapp * 8*062c5bc4SJason Schmidlapp * -------------------------------------------------------------------------- 9*062c5bc4SJason Schmidlapp * 10*062c5bc4SJason Schmidlapp * Pthreads-embedded (PTE) - POSIX Threads Library for embedded systems 11*062c5bc4SJason Schmidlapp * Copyright(C) 2008 Jason Schmidlapp 12*062c5bc4SJason Schmidlapp * 13*062c5bc4SJason Schmidlapp * Contact Email: jschmidlapp@users.sourceforge.net 14*062c5bc4SJason Schmidlapp * 15*062c5bc4SJason Schmidlapp * 16*062c5bc4SJason Schmidlapp * Based upon Pthreads-win32 - POSIX Threads Library for Win32 17*062c5bc4SJason Schmidlapp * Copyright(C) 1998 John E. Bossom 18*062c5bc4SJason Schmidlapp * Copyright(C) 1999,2005 Pthreads-win32 contributors 19*062c5bc4SJason Schmidlapp * 20*062c5bc4SJason Schmidlapp * Contact Email: rpj@callisto.canberra.edu.au 21*062c5bc4SJason Schmidlapp * 22*062c5bc4SJason Schmidlapp * The original list of contributors to the Pthreads-win32 project 23*062c5bc4SJason Schmidlapp * is contained in the file CONTRIBUTORS.ptw32 included with the 24*062c5bc4SJason Schmidlapp * source code distribution. The list can also be seen at the 25*062c5bc4SJason Schmidlapp * following World Wide Web location: 26*062c5bc4SJason Schmidlapp * http://sources.redhat.com/pthreads-win32/contributors.html 27*062c5bc4SJason Schmidlapp * 28*062c5bc4SJason Schmidlapp * This library is free software; you can redistribute it and/or 29*062c5bc4SJason Schmidlapp * modify it under the terms of the GNU Lesser General Public 30*062c5bc4SJason Schmidlapp * License as published by the Free Software Foundation; either 31*062c5bc4SJason Schmidlapp * version 2 of the License, or (at your option) any later version. 32*062c5bc4SJason Schmidlapp * 33*062c5bc4SJason Schmidlapp * This library is distributed in the hope that it will be useful, 34*062c5bc4SJason Schmidlapp * but WITHOUT ANY WARRANTY; without even the implied warranty of 35*062c5bc4SJason Schmidlapp * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 36*062c5bc4SJason Schmidlapp * Lesser General Public License for more details. 37*062c5bc4SJason Schmidlapp * 38*062c5bc4SJason Schmidlapp * You should have received a copy of the GNU Lesser General Public 39*062c5bc4SJason Schmidlapp * License along with this library in the file COPYING.LIB; 40*062c5bc4SJason Schmidlapp * if not, write to the Free Software Foundation, Inc., 41*062c5bc4SJason Schmidlapp * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA 42*062c5bc4SJason Schmidlapp */ 43*062c5bc4SJason Schmidlapp 44*062c5bc4SJason Schmidlapp #include "pthread.h" 45*062c5bc4SJason Schmidlapp #include "implement.h" 46*062c5bc4SJason Schmidlapp 47*062c5bc4SJason Schmidlapp 48*062c5bc4SJason Schmidlapp int pte_processInitialized = PTE_FALSE; 49*062c5bc4SJason Schmidlapp pte_thread_t * pte_threadReuseTop = PTE_THREAD_REUSE_EMPTY; 50*062c5bc4SJason Schmidlapp pte_thread_t * pte_threadReuseBottom = PTE_THREAD_REUSE_EMPTY; 51*062c5bc4SJason Schmidlapp pthread_key_t pte_selfThreadKey = NULL; 52*062c5bc4SJason Schmidlapp pthread_key_t pte_cleanupKey = NULL; 53*062c5bc4SJason Schmidlapp pthread_cond_t pte_cond_list_head = NULL; 54*062c5bc4SJason Schmidlapp pthread_cond_t pte_cond_list_tail = NULL; 55*062c5bc4SJason Schmidlapp 56*062c5bc4SJason Schmidlapp int pte_concurrency = 0; 57*062c5bc4SJason Schmidlapp 58*062c5bc4SJason Schmidlapp /* What features have been auto-detaected */ 59*062c5bc4SJason Schmidlapp int pte_features = 0; 60*062c5bc4SJason Schmidlapp 61*062c5bc4SJason Schmidlapp unsigned char pte_smp_system = PTE_TRUE; /* Safer if assumed true initially. */ 62*062c5bc4SJason Schmidlapp 63*062c5bc4SJason Schmidlapp /* 64*062c5bc4SJason Schmidlapp * Global lock for managing pthread_t struct reuse. 65*062c5bc4SJason Schmidlapp */ 66*062c5bc4SJason Schmidlapp pte_osMutexHandle pte_thread_reuse_lock; 67*062c5bc4SJason Schmidlapp 68*062c5bc4SJason Schmidlapp /* 69*062c5bc4SJason Schmidlapp * Global lock for testing internal state of statically declared mutexes. 70*062c5bc4SJason Schmidlapp */ 71*062c5bc4SJason Schmidlapp pte_osMutexHandle pte_mutex_test_init_lock; 72*062c5bc4SJason Schmidlapp 73*062c5bc4SJason Schmidlapp /* 74*062c5bc4SJason Schmidlapp * Global lock for testing internal state of PTHREAD_COND_INITIALIZER 75*062c5bc4SJason Schmidlapp * created condition variables. 76*062c5bc4SJason Schmidlapp */ 77*062c5bc4SJason Schmidlapp pte_osMutexHandle pte_cond_test_init_lock; 78*062c5bc4SJason Schmidlapp 79*062c5bc4SJason Schmidlapp /* 80*062c5bc4SJason Schmidlapp * Global lock for testing internal state of PTHREAD_RWLOCK_INITIALIZER 81*062c5bc4SJason Schmidlapp * created read/write locks. 82*062c5bc4SJason Schmidlapp */ 83*062c5bc4SJason Schmidlapp pte_osMutexHandle pte_rwlock_test_init_lock; 84*062c5bc4SJason Schmidlapp 85*062c5bc4SJason Schmidlapp /* 86*062c5bc4SJason Schmidlapp * Global lock for testing internal state of PTHREAD_SPINLOCK_INITIALIZER 87*062c5bc4SJason Schmidlapp * created spin locks. 88*062c5bc4SJason Schmidlapp */ 89*062c5bc4SJason Schmidlapp pte_osMutexHandle pte_spinlock_test_init_lock; 90*062c5bc4SJason Schmidlapp 91*062c5bc4SJason Schmidlapp /* 92*062c5bc4SJason Schmidlapp * Global lock for condition variable linked list. The list exists 93*062c5bc4SJason Schmidlapp * to wake up CVs when a WM_TIMECHANGE message arrives. See 94*062c5bc4SJason Schmidlapp * w32_TimeChangeHandler.c. 95*062c5bc4SJason Schmidlapp */ 96*062c5bc4SJason Schmidlapp pte_osMutexHandle pte_cond_list_lock; 97*062c5bc4SJason Schmidlapp 98*062c5bc4SJason Schmidlapp 99