1 // 2 // Copyright (c) 2014 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 // tls.h: Simple cross-platform interface for thread local storage. 8 9 #ifndef COMMON_TLS_H_ 10 #define COMMON_TLS_H_ 11 12 #include "common/platform.h" 13 14 #ifdef ANGLE_PLATFORM_WINDOWS 15 16 // TLS does not exist for Windows Store and needs to be emulated 17 # ifdef ANGLE_ENABLE_WINDOWS_STORE 18 # ifndef TLS_OUT_OF_INDEXES 19 # define TLS_OUT_OF_INDEXES static_cast<DWORD>(0xFFFFFFFF) 20 # endif 21 # ifndef CREATE_SUSPENDED 22 # define CREATE_SUSPENDED 0x00000004 23 # endif 24 # endif 25 typedef DWORD TLSIndex; 26 # define TLS_INVALID_INDEX (TLS_OUT_OF_INDEXES) 27 #elif defined(ANGLE_PLATFORM_POSIX) 28 # include <pthread.h> 29 # include <semaphore.h> 30 # include <errno.h> 31 typedef pthread_key_t TLSIndex; 32 # define TLS_INVALID_INDEX (static_cast<TLSIndex>(-1)) 33 #else 34 # error Unsupported platform. 35 #endif 36 37 // TODO(kbr): for POSIX platforms this will have to be changed to take 38 // in a destructor function pointer, to allow the thread-local storage 39 // to be properly deallocated upon thread exit. 40 TLSIndex CreateTLSIndex(); 41 bool DestroyTLSIndex(TLSIndex index); 42 43 bool SetTLSValue(TLSIndex index, void *value); 44 void *GetTLSValue(TLSIndex index); 45 46 #endif // COMMON_TLS_H_ 47