summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authord <>1999-01-06 05:19:32 +0000
committerd <>1999-01-06 05:19:32 +0000
commit4865b13e8e7bce02c55a40a6d1e505a6485483b6 (patch)
tree034c28696c967fb8ec32df42cce81d4bd3f5c7f8 /src
parent13215bc3b7babd9ef92e2e94f0ed0104529722b2 (diff)
downloadopenbsd-4865b13e8e7bce02c55a40a6d1e505a6485483b6.tar.gz
openbsd-4865b13e8e7bce02c55a40a6d1e505a6485483b6.tar.bz2
openbsd-4865b13e8e7bce02c55a40a6d1e505a6485483b6.zip
clean
Diffstat (limited to 'src')
-rw-r--r--src/lib/libc/include/thread_private.h74
1 files changed, 39 insertions, 35 deletions
diff --git a/src/lib/libc/include/thread_private.h b/src/lib/libc/include/thread_private.h
index a7f7749078..0027468269 100644
--- a/src/lib/libc/include/thread_private.h
+++ b/src/lib/libc/include/thread_private.h
@@ -3,7 +3,7 @@
3 * Support for thread-safety in libc and libc_r common code using macros 3 * Support for thread-safety in libc and libc_r common code using macros
4 * to declare thread-safe data structures. 4 * to declare thread-safe data structures.
5 * 5 *
6 * $OpenBSD: thread_private.h,v 1.1 1998/11/20 11:18:41 d Exp $ 6 * $OpenBSD: thread_private.h,v 1.2 1999/01/06 05:19:32 d Exp $
7 */ 7 */
8 8
9#ifndef _THREAD_PRIVATE_H_ 9#ifndef _THREAD_PRIVATE_H_
@@ -14,8 +14,8 @@
14 * Copyright (c) 1998 John Birrell <jb@cimlogic.com.au>. 14 * Copyright (c) 1998 John Birrell <jb@cimlogic.com.au>.
15 * All rights reserved. 15 * All rights reserved.
16 * 16 *
17 * $Id: thread_private.h,v 1.1 1998/11/20 11:18:41 d Exp $ 17 * $Id: thread_private.h,v 1.2 1999/01/06 05:19:32 d Exp $
18 * $OpenBSD: thread_private.h,v 1.1 1998/11/20 11:18:41 d Exp $ 18 * $OpenBSD: thread_private.h,v 1.2 1999/01/06 05:19:32 d Exp $
19 */ 19 */
20 20
21/* 21/*
@@ -32,6 +32,30 @@ extern volatile int __isthreaded;
32#include <pthread.h> 32#include <pthread.h>
33#include "pthread_private.h" 33#include "pthread_private.h"
34 34
35/*
36 * File lock contention is difficult to diagnose without knowing
37 * where locks were set. Allow a debug library to be built which
38 * records the source file and line number of each lock call.
39 */
40#ifdef _FLOCK_DEBUG
41#define _FLOCKFILE(x) _flockfile_debug(x, __FILE__, __LINE__)
42#else
43#define _FLOCKFILE(x) flockfile(x)
44#endif
45
46/*
47 * These macros help in making persistent storage thread-specific.
48 * Libc makes extensive use of private static data structures
49 * that hold state across function invocation, and these macros
50 * are no-ops when _THREAD_SAFE is not defined.
51 * In a thread-safe library, the static variables are used only for
52 * initialising the per-thread instances of the state variables.
53 */
54
55/*
56 * Give names to the private variables used to hold per-thread
57 * data structures.
58 */
35#ifdef __STDC__ 59#ifdef __STDC__
36#define __THREAD_MUTEXP_NAME(name) _thread_mutexp_inst__ ## name 60#define __THREAD_MUTEXP_NAME(name) _thread_mutexp_inst__ ## name
37#define __THREAD_MUTEX_NAME(name) _thread_mutex_inst__ ## name 61#define __THREAD_MUTEX_NAME(name) _thread_mutex_inst__ ## name
@@ -45,7 +69,6 @@ extern volatile int __isthreaded;
45/* 69/*
46 * Mutex declare, lock and unlock macros. 70 * Mutex declare, lock and unlock macros.
47 */ 71 */
48
49#define _THREAD_PRIVATE_MUTEX(name) \ 72#define _THREAD_PRIVATE_MUTEX(name) \
50 static struct pthread_mutex __THREAD_MUTEXP_NAME(name) = \ 73 static struct pthread_mutex __THREAD_MUTEXP_NAME(name) = \
51 PTHREAD_MUTEX_STATIC_INITIALIZER; \ 74 PTHREAD_MUTEX_STATIC_INITIALIZER; \
@@ -59,16 +82,7 @@ extern volatile int __isthreaded;
59 pthread_mutex_unlock(&__THREAD_MUTEX_NAME(name)) 82 pthread_mutex_unlock(&__THREAD_MUTEX_NAME(name))
60 83
61/* 84/*
62 * These macros help in making persistent storage thread-specific. 85 * A mutexed data structure used to hold the persistent state's key.
63 * Libc makes extensive use of private static data structures
64 * that hold state across function invocation, and these macros
65 * are no-ops when _THREAD_SAFE is not defined.
66 * In a thread-safe library, the static variables are used only for
67 * initialising the per-thread instances of the state variables.
68 */
69
70/*
71 * a mutexed data structure used to hold the persistent state's key
72 */ 86 */
73struct _thread_private_key_struct { 87struct _thread_private_key_struct {
74 struct pthread_mutex lockd; 88 struct pthread_mutex lockd;
@@ -138,11 +152,17 @@ struct _thread_private_key_struct {
138 __p; \ 152 __p; \
139 }) 153 })
140 154
141#else 155/*
156 * Macros for locking and unlocking FILEs. These test if the
157 * process is threaded to avoid locking when not required.
158 */
159#define FLOCKFILE(fp) if (__isthreaded) _FLOCKFILE(fp)
160#define FUNLOCKFILE(fp) if (__isthreaded) funlockfile(fp)
142 161
162#else /* !_THREAD_SAFE */
143 163
144/* 164/*
145 * do-nothing macros for single-threaded case 165 * Do-nothing macros for single-threaded case.
146 */ 166 */
147#define _FD_LOCK(f,o,p) (0) 167#define _FD_LOCK(f,o,p) (0)
148#define _FD_UNLOCK(f,o) /* nothing */ 168#define _FD_UNLOCK(f,o) /* nothing */
@@ -151,25 +171,9 @@ struct _thread_private_key_struct {
151#define _THREAD_PRIVATE_MUTEX(_name) /* nothing */ 171#define _THREAD_PRIVATE_MUTEX(_name) /* nothing */
152#define _THREAD_PRIVATE_MUTEX_LOCK(_name) /* nothing */ 172#define _THREAD_PRIVATE_MUTEX_LOCK(_name) /* nothing */
153#define _THREAD_PRIVATE_MUTEX_UNLOCK(_name) /* nothing */ 173#define _THREAD_PRIVATE_MUTEX_UNLOCK(_name) /* nothing */
174#define FLOCKFILE(fp) /* nothing */
175#define FUNLOCKFILE(fp) /* nothing */
154 176
155#endif 177#endif /* !_THREAD_SAFE */
156
157/*
158 * File lock contention is difficult to diagnose without knowing
159 * where locks were set. Allow a debug library to be built which
160 * records the source file and line number of each lock call.
161 */
162#ifdef _FLOCK_DEBUG
163#define _FLOCKFILE(x) _flockfile_debug(x, __FILE__, __LINE__)
164#else
165#define _FLOCKFILE(x) flockfile(x)
166#endif
167
168/*
169 * Macros for locking and unlocking FILEs. These test if the
170 * process is threaded to avoid locking when not required.
171 */
172#define FLOCKFILE(fp) if (__isthreaded) _FLOCKFILE(fp)
173#define FUNLOCKFILE(fp) if (__isthreaded) funlockfile(fp)
174 178
175#endif _THREAD_PRIVATE_H_ 179#endif _THREAD_PRIVATE_H_