X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;ds=sidebyside;f=include%2Fldap_int_thread.h;h=46c79ae8de6d59b29b63961d5dd23c22070dd80f;hb=5714f8565ff4228270ed2c97f78f5b31ce085b6e;hp=b072ae2b82ce001e7ad53cc590d256f09ab08b08;hpb=acbb5cf689a4336af05c9f259d909d8141055bac;p=openldap diff --git a/include/ldap_int_thread.h b/include/ldap_int_thread.h index b072ae2b82..46c79ae8de 100644 --- a/include/ldap_int_thread.h +++ b/include/ldap_int_thread.h @@ -227,6 +227,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,14 +248,31 @@ 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 { ldap_int_thread_mutex_t wrapped; ldap_debug_usage_info_t usage; + ldap_int_thread_t owner; } ldap_debug_thread_mutex_t; typedef struct { @@ -267,6 +285,17 @@ typedef struct { ldap_debug_usage_info_t usage; } ldap_debug_thread_rdwr_t; +#ifndef NDEBUG +#define LDAP_INT_THREAD_ASSERT_MUTEX_OWNER(mutex) \ + ldap_debug_thread_assert_mutex_owner( \ + __FILE__, __LINE__, "owns(" #mutex ")", mutex ) +LDAP_F(void) ldap_debug_thread_assert_mutex_owner LDAP_P(( + LDAP_CONST char *file, + int line, + LDAP_CONST char *msg, + ldap_debug_thread_mutex_t *mutex )); +#endif /* NDEBUG */ + LDAP_END_DECL #endif /* LDAP_THREAD_DEBUG_WRAP */