5 #ifndef CRYPTOPP_IMPORTS
6 #ifdef THREADS_AVAILABLE
14 NAMESPACE_BEGIN(CryptoPP)
17 :
OS_Error(OTHER_ERROR, "
ThreadLocalStorage: " + operation + " operation failed with error 0x" + IntToString(error, 16), operation, error)
21 ThreadLocalStorage::ThreadLocalStorage()
25 if (m_index == TLS_OUT_OF_INDEXES)
26 throw Err(
"TlsAlloc", GetLastError());
28 int error = pthread_key_create(&m_index, NULL);
30 throw Err(
"pthread_key_create", error);
34 ThreadLocalStorage::~ThreadLocalStorage()
37 if (!TlsFree(m_index))
38 throw Err(
"TlsFree", GetLastError());
40 int error = pthread_key_delete(m_index);
42 throw Err(
"pthread_key_delete", error);
46 void ThreadLocalStorage::SetValue(
void *value)
49 if (!TlsSetValue(m_index, value))
50 throw Err(
"TlsSetValue", GetLastError());
52 int error = pthread_setspecific(m_index, value);
54 throw Err(
"pthread_key_getspecific", error);
58 void *ThreadLocalStorage::GetValue()
const
61 void *result = TlsGetValue(m_index);
62 if (!result && GetLastError() != NO_ERROR)
63 throw Err(
"TlsGetValue", GetLastError());
65 void *result = pthread_getspecific(m_index);
72 #endif // #ifdef THREADS_AVAILABLE