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// 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 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 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