Merge "Make libcutils' thread local stuff more clearly deprecated." am: 77692aeea2 am: f512b499b8

Original change: https://android-review.googlesource.com/c/platform/system/core/+/1515640

Change-Id: I87a4bc9d4b2076dc63c1a359ca15cc759d2ab5b4
This commit is contained in:
Treehugger Robot 2020-12-07 18:47:25 +00:00 committed by Automerger Merge Worker
commit a97067d31a
2 changed files with 17 additions and 70 deletions

View file

@ -14,8 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
#ifndef _LIBS_CUTILS_THREADS_H #pragma once
#define _LIBS_CUTILS_THREADS_H
#include <sys/types.h> #include <sys/types.h>
@ -29,16 +28,6 @@
extern "C" { extern "C" {
#endif #endif
//
// Deprecated: use android::base::GetThreadId instead, which doesn't truncate on Mac/Windows.
//
extern pid_t gettid();
//
// Deprecated: use `_Thread_local` in C or `thread_local` in C++.
//
#if !defined(_WIN32) #if !defined(_WIN32)
typedef struct { typedef struct {
@ -49,29 +38,24 @@ typedef struct {
#define THREAD_STORE_INITIALIZER { PTHREAD_MUTEX_INITIALIZER, 0, 0 } #define THREAD_STORE_INITIALIZER { PTHREAD_MUTEX_INITIALIZER, 0, 0 }
#else // !defined(_WIN32) #endif
typedef struct { //
int lock_init; // Deprecated: use android::base::GetThreadId instead, which doesn't truncate on Mac/Windows.
int has_tls; //
DWORD tls; extern pid_t gettid();
CRITICAL_SECTION lock;
} thread_store_t;
#define THREAD_STORE_INITIALIZER { 0, 0, 0, {0, 0, 0, 0, 0, 0} } //
// Deprecated: use `_Thread_local` in C or `thread_local` in C++.
#endif // !defined(_WIN32) //
#if !defined(_WIN32)
typedef void (*thread_store_destruct_t)(void* value); typedef void (*thread_store_destruct_t)(void* x);
extern void* thread_store_get(thread_store_t* x)
extern void* thread_store_get(thread_store_t* store); __attribute__((__deprecated__("use thread_local instead")));
extern void thread_store_set(thread_store_t* x, void* y, thread_store_destruct_t z)
extern void thread_store_set(thread_store_t* store, __attribute__((__deprecated__("use thread_local instead")));
void* value, #endif
thread_store_destruct_t destroy);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
#endif /* _LIBS_CUTILS_THREADS_H */

View file

@ -47,7 +47,6 @@ pid_t gettid() {
#endif // __ANDROID__ #endif // __ANDROID__
#if !defined(_WIN32) #if !defined(_WIN32)
void* thread_store_get( thread_store_t* store ) void* thread_store_get( thread_store_t* store )
{ {
if (!store->has_tls) if (!store->has_tls)
@ -72,40 +71,4 @@ extern void thread_store_set( thread_store_t* store,
pthread_setspecific( store->tls, value ); pthread_setspecific( store->tls, value );
} }
#endif
#else /* !defined(_WIN32) */
void* thread_store_get( thread_store_t* store )
{
if (!store->has_tls)
return NULL;
return (void*) TlsGetValue( store->tls );
}
void thread_store_set( thread_store_t* store,
void* value,
thread_store_destruct_t /*destroy*/ )
{
/* XXX: can't use destructor on thread exit */
if (!store->lock_init) {
store->lock_init = -1;
InitializeCriticalSection( &store->lock );
store->lock_init = -2;
} else while (store->lock_init != -2) {
Sleep(10); /* 10ms */
}
EnterCriticalSection( &store->lock );
if (!store->has_tls) {
store->tls = TlsAlloc();
if (store->tls == TLS_OUT_OF_INDEXES) {
LeaveCriticalSection( &store->lock );
return;
}
store->has_tls = 1;
}
LeaveCriticalSection( &store->lock );
TlsSetValue( store->tls, value );
}
#endif /* !defined(_WIN32) */