X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=include%2Fldap_int_thread.h;h=759c951e22272946d806cff073acf35f4981f01d;hb=8fef28c0592e1c833ac1e3877493539a65cfc8de;hp=c730f729507f0253b047617715b9eb0d9d1f68c0;hpb=7a113f0759d03783d3ff90b46532bae68434e2b0;p=openldap diff --git a/include/ldap_int_thread.h b/include/ldap_int_thread.h index c730f72950..759c951e22 100644 --- a/include/ldap_int_thread.h +++ b/include/ldap_int_thread.h @@ -2,7 +2,7 @@ /* $OpenLDAP$ */ /* This work is part of OpenLDAP Software . * - * Copyright 1998-2006 The OpenLDAP Foundation. + * Copyright 1998-2010 The OpenLDAP Foundation. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -44,6 +44,7 @@ LDAP_BEGIN_DECL typedef pthread_t ldap_int_thread_t; typedef pthread_mutex_t ldap_int_thread_mutex_t; typedef pthread_cond_t ldap_int_thread_cond_t; +typedef pthread_key_t ldap_int_thread_key_t; #define ldap_int_thread_equal(a, b) pthread_equal((a), (b)) @@ -63,7 +64,7 @@ typedef pthread_cond_t ldap_int_thread_cond_t; #define LDAP_THREAD_HAVE_SETCONCURRENCY 1 #endif -#if 0 && defined( HAVE_PTHREAD_RWLOCK_DESTROY ) +#if defined( HAVE_PTHREAD_RWLOCK_DESTROY ) #define LDAP_THREAD_HAVE_RDWR 1 typedef pthread_rwlock_t ldap_int_thread_rdwr_t; #endif @@ -79,7 +80,7 @@ LDAP_END_DECL #if defined( HAVE_MACH_CTHREADS_H ) # include -#elif defined( HAVE_CTHREAD_H +#elif defined( HAVE_CTHREADS_H ) # include #endif @@ -88,6 +89,7 @@ LDAP_BEGIN_DECL typedef cthread_t ldap_int_thread_t; typedef struct mutex ldap_int_thread_mutex_t; typedef struct condition ldap_int_thread_cond_t; +typedef cthread_key_t ldap_int_thread_key_t; LDAP_END_DECL @@ -106,6 +108,7 @@ LDAP_BEGIN_DECL typedef pth_t ldap_int_thread_t; typedef pth_mutex_t ldap_int_thread_mutex_t; typedef pth_cond_t ldap_int_thread_cond_t; +typedef pth_key_t ldap_int_thread_key_t; #if 0 #define LDAP_THREAD_HAVE_RDWR 1 @@ -129,6 +132,7 @@ LDAP_BEGIN_DECL typedef thread_t ldap_int_thread_t; typedef mutex_t ldap_int_thread_mutex_t; typedef cond_t ldap_int_thread_cond_t; +typedef thread_key_t ldap_int_thread_key_t; #define HAVE_REENTRANT_FUNCTIONS 1 @@ -181,6 +185,7 @@ LDAP_BEGIN_DECL typedef unsigned long ldap_int_thread_t; typedef HANDLE ldap_int_thread_mutex_t; typedef HANDLE ldap_int_thread_cond_t; +typedef DWORD ldap_int_thread_key_t; LDAP_END_DECL @@ -201,6 +206,7 @@ LDAP_BEGIN_DECL typedef int ldap_int_thread_t; typedef int ldap_int_thread_mutex_t; typedef int ldap_int_thread_cond_t; +typedef int ldap_int_thread_key_t; #define LDAP_THREAD_HAVE_TPOOL 1 typedef int ldap_int_thread_pool_t; @@ -227,6 +233,7 @@ LDAP_F(int) ldap_int_thread_pool_shutdown ( void ); typedef struct ldap_int_thread_pool_s * ldap_int_thread_pool_t; #endif +typedef struct ldap_int_thread_rmutex_s * ldap_int_thread_rmutex_t; LDAP_END_DECL @@ -247,9 +254,25 @@ LDAP_BEGIN_DECL #define LDAP_UINTPTR_T unsigned long #endif -typedef union { - unsigned char *ptr; - LDAP_UINTPTR_T num; +typedef enum { + ldap_debug_magic = -(int) (((unsigned)-1)/19) +} ldap_debug_magic_t; + +typedef enum { + /* Could fill in "locked" etc here later */ + ldap_debug_state_inited = (int) (((unsigned)-1)/11), + ldap_debug_state_destroyed +} ldap_debug_state_t; + +typedef struct { + /* Enclosed in magic numbers in the hope of catching overwrites */ + ldap_debug_magic_t magic; /* bit pattern to recognize usages */ + LDAP_UINTPTR_T self; /* ~(LDAP_UINTPTR_T)&(this struct) */ + union ldap_debug_mem_u { /* Dummy memory reference */ + unsigned char *ptr; + LDAP_UINTPTR_T num; + } mem; + ldap_debug_state_t state; /* doubles as another magic number */ } ldap_debug_usage_info_t; typedef struct { @@ -271,7 +294,7 @@ typedef struct { #ifndef NDEBUG #define LDAP_INT_THREAD_ASSERT_MUTEX_OWNER(mutex) \ ldap_debug_thread_assert_mutex_owner( \ - _FILE__, __LINE__, "owns(" #mutex ")", mutex ) + __FILE__, __LINE__, "owns(" #mutex ")", mutex ) LDAP_F(void) ldap_debug_thread_assert_mutex_owner LDAP_P(( LDAP_CONST char *file, int line,