thread_private.h revision f2cea021ab2c6d7d7feeb40cca098aa132605876
11dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/* $OpenBSD: thread_private.h,v 1.18 2006/02/22 07:16:31 otto Exp $ */
21dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
31dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/* PUBLIC DOMAIN: No Rights Reserved. Marco S Hyman <marc@snafu.org> */
41dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
51dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#ifndef _THREAD_PRIVATE_H_
61dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define _THREAD_PRIVATE_H_
71dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
81dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <pthread.h>
91dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
101dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/*
111dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * This file defines the thread library interface to libc.  Thread
121dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * libraries must implement the functions described here for proper
131dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * inter-operation with libc.   libc contains weak versions of the
141dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * described functions for operation in a non-threaded environment.
151dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project */
161dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
171dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/*
181dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * helper macro to make unique names in the thread namespace
191dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project */
201dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define __THREAD_NAME(name)	__CONCAT(_thread_tagname_,name)
211dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
221dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectstruct __thread_private_tag_t {
231dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    pthread_mutex_t    _private_lock;
241dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project    pthread_key_t      _private_key;
251dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project};
261dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
271dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define _THREAD_PRIVATE_MUTEX(name)  \
281dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	static struct __thread_private_tag_t  __THREAD_NAME(name) = { PTHREAD_MUTEX_INITIALIZER, -1 }
291dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define _THREAD_PRIVATE_MUTEX_LOCK(name)  \
301dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	pthread_mutex_lock( &__THREAD_NAME(name)._private_lock )
311dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define _THREAD_PRIVATE_MUTEX_UNLOCK(name) \
321dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	pthread_mutex_unlock( &__THREAD_NAME(name)._private_lock )
331dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
341dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectvoid	_thread_atexit_lock(void);
351dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectvoid	_thread_atexit_unlock(void);
361dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
37f2cea021ab2c6d7d7feeb40cca098aa132605876Elliott Hughes#define _ATEXIT_LOCK() _thread_atexit_lock()
38f2cea021ab2c6d7d7feeb40cca098aa132605876Elliott Hughes#define _ATEXIT_UNLOCK() _thread_atexit_unlock()
391dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
401dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#endif /* _THREAD_PRIVATE_H_ */
41