blob: f8ed83b595cc98cc443535b14bb4f81ef6a1dd05 [file] [log] [blame]
John Bauman89401822014-05-06 15:04:28 -04001//
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//
Nicolas Capenscc863da2015-01-21 15:50:55 -050010#include "osinclude.h"
John Bauman89401822014-05-06 15:04:28 -040011
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}