7 #if CRYPTOPP_MSC_VERSION 8 # pragma warning(disable: 4297) 11 #ifndef CRYPTOPP_IMPORTS 12 #ifdef THREADS_AVAILABLE 27 ThreadLocalStorage::ThreadLocalStorage()
31 assert(m_index != TLS_OUT_OF_INDEXES);
32 if (m_index == TLS_OUT_OF_INDEXES)
33 throw Err(
"TlsAlloc", GetLastError());
36 int error = pthread_key_create(&m_index, NULL);
39 throw Err(
"pthread_key_create", error);
43 ThreadLocalStorage::~ThreadLocalStorage() CRYPTOPP_THROW
45 #ifdef CRYPTOPP_UNCAUGHT_EXCEPTION_AVAILABLE 46 if (!std::uncaught_exception())
52 int rc = TlsFree(m_index);
55 throw Err(
"TlsFree", GetLastError());
59 int error = pthread_key_delete(m_index);
62 throw Err(
"pthread_key_delete", error);
65 #ifndef CRYPTOPP_UNCAUGHT_EXCEPTION_AVAILABLE 72 void ThreadLocalStorage::SetValue(
void *value)
75 if (!TlsSetValue(m_index, value))
76 throw Err(
"TlsSetValue", GetLastError());
78 int error = pthread_setspecific(m_index, value);
80 throw Err(
"pthread_key_getspecific", error);
84 void *ThreadLocalStorage::GetValue()
const 87 void *result = TlsGetValue(m_index);
88 const DWORD dwRet = GetLastError();
90 assert(result || (!result && (dwRet == NO_ERROR)));
91 if (!result && dwRet != NO_ERROR)
92 throw Err(
"TlsGetValue", dwRet);
96 void *result = pthread_getspecific(m_index);
103 #endif // #ifdef THREADS_AVAILABLE Base class for all exceptions thrown by Crypto++.
The operating system reported an error.
Library configuration file.
std::string IntToString(T value, unsigned int base=10)
Converts a value to a string.
Crypto++ library namespace.