1/* ldap_thr_debug.h - preprocessor magic for LDAP_THREAD_DEBUG */ 2/* $OpenLDAP$ */ 3/* This work is part of OpenLDAP Software <http://www.openldap.org/>. 4 * 5 * Copyright 2005-2011 The OpenLDAP Foundation. 6 * All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted only as authorized by the OpenLDAP 10 * Public License. 11 * 12 * A copy of this license is available in the file LICENSE in the 13 * top-level directory of the distribution or, alternatively, at 14 * <http://www.OpenLDAP.org/license.html>. 15 */ 16 17#ifdef LDAP_THREAD_DEBUG 18 19/* 20 * libldap_r .c files should include this file after ldap_pvt_thread.h, 21 * with the appropriate LDAP_THREAD*_IMPLEMENTATION macro(s) defined. 22 */ 23 24#ifndef _LDAP_PVT_THREAD_H 25#error "ldap_pvt_thread.h" must be included before "ldap_thr_debug.h" 26#endif 27 28/* 29 * Support for thr_debug.c: 30 * 31 * thr_debug.c defines ldap_pvt_thread_* as wrappers around the real 32 * ldap_pvt_thread_* implementation, which this file renames to 33 * ldap_int_thread_*. 34 * 35 * Implementation: 36 * 37 * This file re#defines selected ldap_pvt_thread_* names to 38 * ldap_int_thread_*, which will be used from wrappers in thr_debug.c. 39 * Two ldap_int_*() calls are redirected to call ldap_debug_*(): These 40 * are wrappers around the originals, whose definitions are not renamed. 41 * This file then #includes ldap_pvt_thread.h to declare the renamed 42 * functions/types. If #included from thr_debug.c it finally #undefines 43 * the macros again. 44 * 45 * include/ldap_pvt_thread.h declares the typedefs ldap_pvt_thread*_t as 46 * either wrapper types ldap_debug_thread*_t or their usual definitions 47 * ldap_int_thread*_t, depending on the LDAP_THREAD_DEBUG_WRAP option. 48 * When defining the underlying implementation, this file then redirects 49 * the type names back to the original ldap_int_thread*_t types. 50 * include/ldap_<int,pvt>_thread.h also do some thr_debug magic. 51 * 52 * So, 53 * libldap_r/<not thr_debug.c> thus define ldap_int_thread_*() instead 54 * of ldap_pvt_thread_*(). 55 * thr_debug.c defines the ldap_pvt_*() and ldap_debug_*() functions. 56 * In thread.c, ldap_pvt_thread_<initialize/destroy>() will call 57 * ldap_debug_thread_*() instead of ldap_int_thread_*(). 58 * In tpool.c, ldap_int_thread_pool_shutdown() has explicit thr_debug.c 59 * support which treats ldap_pvt_thread_pool_destroy() the same way. 60 */ 61 62#ifndef LDAP_THREAD_IMPLEMENTATION /* for first part of threads.c */ 63#define ldap_int_thread_initialize ldap_debug_thread_initialize 64#define ldap_int_thread_destroy ldap_debug_thread_destroy 65#else /* LDAP_THREAD_IMPLEMENTATION -- for thr_*.c and end of threads.c */ 66#undef ldap_int_thread_initialize 67#undef ldap_int_thread_destroy 68#ifdef LDAP_THREAD_DEBUG_WRAP /* see ldap_pvt_thread.h */ 69#define ldap_pvt_thread_mutex_t ldap_int_thread_mutex_t 70#define ldap_pvt_thread_cond_t ldap_int_thread_cond_t 71#endif 72#define ldap_pvt_thread_sleep ldap_int_thread_sleep 73#define ldap_pvt_thread_get_concurrency ldap_int_thread_get_concurrency 74#define ldap_pvt_thread_set_concurrency ldap_int_thread_set_concurrency 75#define ldap_pvt_thread_create ldap_int_thread_create 76#define ldap_pvt_thread_exit ldap_int_thread_exit 77#define ldap_pvt_thread_join ldap_int_thread_join 78#define ldap_pvt_thread_kill ldap_int_thread_kill 79#define ldap_pvt_thread_yield ldap_int_thread_yield 80#define ldap_pvt_thread_cond_init ldap_int_thread_cond_init 81#define ldap_pvt_thread_cond_destroy ldap_int_thread_cond_destroy 82#define ldap_pvt_thread_cond_signal ldap_int_thread_cond_signal 83#define ldap_pvt_thread_cond_broadcast ldap_int_thread_cond_broadcast 84#define ldap_pvt_thread_cond_wait ldap_int_thread_cond_wait 85#define ldap_pvt_thread_mutex_init ldap_int_thread_mutex_init 86#define ldap_pvt_thread_mutex_destroy ldap_int_thread_mutex_destroy 87#define ldap_pvt_thread_mutex_lock ldap_int_thread_mutex_lock 88#define ldap_pvt_thread_mutex_trylock ldap_int_thread_mutex_trylock 89#define ldap_pvt_thread_mutex_unlock ldap_int_thread_mutex_unlock 90#define ldap_pvt_thread_self ldap_int_thread_self 91#endif /* LDAP_THREAD_IMPLEMENTATION */ 92 93#ifdef LDAP_THREAD_RDWR_IMPLEMENTATION /* rdwr.c, thr_debug.c */ 94#ifdef LDAP_THREAD_DEBUG_WRAP /* see ldap_pvt_thread.h */ 95#define ldap_pvt_thread_rdwr_t ldap_int_thread_rdwr_t 96#endif 97#define ldap_pvt_thread_rdwr_init ldap_int_thread_rdwr_init 98#define ldap_pvt_thread_rdwr_destroy ldap_int_thread_rdwr_destroy 99#define ldap_pvt_thread_rdwr_rlock ldap_int_thread_rdwr_rlock 100#define ldap_pvt_thread_rdwr_rtrylock ldap_int_thread_rdwr_rtrylock 101#define ldap_pvt_thread_rdwr_runlock ldap_int_thread_rdwr_runlock 102#define ldap_pvt_thread_rdwr_wlock ldap_int_thread_rdwr_wlock 103#define ldap_pvt_thread_rdwr_wtrylock ldap_int_thread_rdwr_wtrylock 104#define ldap_pvt_thread_rdwr_wunlock ldap_int_thread_rdwr_wunlock 105#define ldap_pvt_thread_rdwr_readers ldap_int_thread_rdwr_readers 106#define ldap_pvt_thread_rdwr_writers ldap_int_thread_rdwr_writers 107#define ldap_pvt_thread_rdwr_active ldap_int_thread_rdwr_active 108#endif /* LDAP_THREAD_RDWR_IMPLEMENTATION */ 109 110#ifdef LDAP_THREAD_POOL_IMPLEMENTATION /* tpool.c, thr_stub.c, thr_debug.c */ 111#ifdef LDAP_THREAD_DEBUG_WRAP /* see ldap_pvt_thread.h */ 112#define ldap_pvt_thread_pool_t ldap_int_thread_pool_t 113#endif 114#define ldap_pvt_thread_pool_init ldap_int_thread_pool_init 115#define ldap_pvt_thread_pool_submit ldap_int_thread_pool_submit 116#define ldap_pvt_thread_pool_maxthreads ldap_int_thread_pool_maxthreads 117#define ldap_pvt_thread_pool_backload ldap_int_thread_pool_backload 118#define ldap_pvt_thread_pool_pause ldap_int_thread_pool_pause 119#define ldap_pvt_thread_pool_resume ldap_int_thread_pool_resume 120#define ldap_pvt_thread_pool_destroy ldap_int_thread_pool_destroy 121#define ldap_pvt_thread_pool_getkey ldap_int_thread_pool_getkey 122#define ldap_pvt_thread_pool_setkey ldap_int_thread_pool_setkey 123#define ldap_pvt_thread_pool_purgekey ldap_int_thread_pool_purgekey 124#define ldap_pvt_thread_pool_context ldap_int_thread_pool_context 125#define ldap_pvt_thread_pool_context_reset ldap_int_thread_pool_context_reset 126#endif /* LDAP_THREAD_POOL_IMPLEMENTATION */ 127 128#undef _LDAP_PVT_THREAD_H 129#include "ldap_pvt_thread.h" 130 131#ifdef LDAP_THREAD_POOL_IMPLEMENTATION /* tpool.c */ 132/* 133 * tpool.c:ldap_int_thread_pool_shutdown() needs this. Could not 134 * use it for ldap_pvt_thread.h above because of its use of LDAP_P(). 135 */ 136#undef ldap_pvt_thread_pool_destroy 137#define ldap_pvt_thread_pool_destroy(p,r) ldap_int_thread_pool_destroy(p,r) 138#endif 139 140#ifdef LDAP_THREAD_DEBUG_IMPLEMENTATION /* thr_debug.c */ 141#undef ldap_pvt_thread_mutex_t 142#undef ldap_pvt_thread_cond_t 143#undef ldap_pvt_thread_sleep 144#undef ldap_pvt_thread_get_concurrency 145#undef ldap_pvt_thread_set_concurrency 146#undef ldap_pvt_thread_create 147#undef ldap_pvt_thread_exit 148#undef ldap_pvt_thread_join 149#undef ldap_pvt_thread_kill 150#undef ldap_pvt_thread_yield 151#undef ldap_pvt_thread_cond_init 152#undef ldap_pvt_thread_cond_destroy 153#undef ldap_pvt_thread_cond_signal 154#undef ldap_pvt_thread_cond_broadcast 155#undef ldap_pvt_thread_cond_wait 156#undef ldap_pvt_thread_mutex_init 157#undef ldap_pvt_thread_mutex_destroy 158#undef ldap_pvt_thread_mutex_lock 159#undef ldap_pvt_thread_mutex_trylock 160#undef ldap_pvt_thread_mutex_unlock 161#undef ldap_pvt_thread_self 162/* LDAP_THREAD_RDWR_IMPLEMENTATION: */ 163#undef ldap_pvt_thread_rdwr_t 164#undef ldap_pvt_thread_rdwr_init 165#undef ldap_pvt_thread_rdwr_destroy 166#undef ldap_pvt_thread_rdwr_rlock 167#undef ldap_pvt_thread_rdwr_rtrylock 168#undef ldap_pvt_thread_rdwr_runlock 169#undef ldap_pvt_thread_rdwr_wlock 170#undef ldap_pvt_thread_rdwr_wtrylock 171#undef ldap_pvt_thread_rdwr_wunlock 172#undef ldap_pvt_thread_rdwr_readers 173#undef ldap_pvt_thread_rdwr_writers 174#undef ldap_pvt_thread_rdwr_active 175/* LDAP_THREAD_POOL_IMPLEMENTATION: */ 176#undef ldap_pvt_thread_pool_t 177#undef ldap_pvt_thread_pool_init 178#undef ldap_pvt_thread_pool_submit 179#undef ldap_pvt_thread_pool_maxthreads 180#undef ldap_pvt_thread_pool_backload 181#undef ldap_pvt_thread_pool_pause 182#undef ldap_pvt_thread_pool_resume 183#undef ldap_pvt_thread_pool_destroy 184#undef ldap_pvt_thread_pool_getkey 185#undef ldap_pvt_thread_pool_setkey 186#undef ldap_pvt_thread_pool_purgekey 187#undef ldap_pvt_thread_pool_context 188#undef ldap_pvt_thread_pool_context_reset 189#endif /* LDAP_THREAD_DEBUG_IMPLEMENTATION */ 190 191#endif /* LDAP_THREAD_DEBUG */ 192