1 // 2 // Copyright (c) 2002-2010 The ANGLE Project Authors. All rights reserved. 3 // Use of this source code is governed by a BSD-style license that can be 4 // found in the LICENSE file. 5 // 6 7 // 8 // This file contains the posix specific functions 9 // 10 #include "compiler/osinclude.h" 11 12 #if !defined(ANGLE_OS_POSIX) 13 #error Trying to build a posix specific file in a non-posix build. 14 #endif 15 16 // 17 // Thread Local Storage Operations 18 // OS_AllocTLSIndex()19OS_TLSIndex OS_AllocTLSIndex() 20 { 21 pthread_key_t pPoolIndex; 22 23 // 24 // Create global pool key. 25 // 26 if ((pthread_key_create(&pPoolIndex, NULL)) != 0) { 27 assert(0 && "OS_AllocTLSIndex(): Unable to allocate Thread Local Storage"); 28 return false; 29 } 30 else { 31 return pPoolIndex; 32 } 33 } 34 35 OS_SetTLSValue(OS_TLSIndex nIndex,void * lpvValue)36bool OS_SetTLSValue(OS_TLSIndex nIndex, void *lpvValue) 37 { 38 if (nIndex == OS_INVALID_TLS_INDEX) { 39 assert(0 && "OS_SetTLSValue(): Invalid TLS Index"); 40 return false; 41 } 42 43 if (pthread_setspecific(nIndex, lpvValue) == 0) 44 return true; 45 else 46 return false; 47 } 48 49 OS_FreeTLSIndex(OS_TLSIndex nIndex)50bool OS_FreeTLSIndex(OS_TLSIndex nIndex) 51 { 52 if (nIndex == OS_INVALID_TLS_INDEX) { 53 assert(0 && "OS_SetTLSValue(): Invalid TLS Index"); 54 return false; 55 } 56 57 // 58 // Delete the global pool key. 59 // 60 if (pthread_key_delete(nIndex) == 0) 61 return true; 62 else 63 return false; 64 } 65