Restore $LDAP_THREAD_DEBUG=off functionality (was lost in last patch).

This commit is contained in:
Hallvard Furuseth 2006-04-03 12:49:30 +00:00
parent 8823f5cc87
commit 7a113f0759
2 changed files with 39 additions and 25 deletions

View file

@ -268,10 +268,16 @@ typedef struct {
ldap_debug_usage_info_t usage; ldap_debug_usage_info_t usage;
} ldap_debug_thread_rdwr_t; } ldap_debug_thread_rdwr_t;
#ifndef NDEBUG
#define LDAP_INT_THREAD_ASSERT_MUTEX_OWNER(mutex) \ #define LDAP_INT_THREAD_ASSERT_MUTEX_OWNER(mutex) \
assert( ldap_debug_thread_mutex_owner( mutex ) ) ldap_debug_thread_assert_mutex_owner( \
LDAP_F(int) ldap_debug_thread_mutex_owner LDAP_P(( _FILE__, __LINE__, "owns(" #mutex ")", mutex )
ldap_debug_thread_mutex_t * )); 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 LDAP_END_DECL

View file

@ -132,9 +132,11 @@ static ldap_int_thread_mutex_t thread_info_mutex;
#define WARN(var, msg) (warn (__FILE__, __LINE__, (msg), #var, (var))) #define WARN(var, msg) (warn (__FILE__, __LINE__, (msg), #var, (var)))
#define ERROR(var,msg) (error(__FILE__, __LINE__, (msg), #var, (var)))
#define WARN_IF(rc, msg) {if (rc) warn (__FILE__, __LINE__, (msg), #rc, (rc));} #define WARN_IF(rc, msg) {if (rc) warn (__FILE__, __LINE__, (msg), #rc, (rc));}
#define ERROR_IF(rc,msg) {if (rc) error(__FILE__, __LINE__, (msg), #rc, (rc));} #define ERROR(var, msg) \
{if (!noerror) error(__FILE__, __LINE__, (msg), #var, (var));}
#define ERROR_IF(rc, msg) \
{if (!noerror && (rc)) error(__FILE__, __LINE__, (msg), #rc, (rc));}
#if 0 #if 0
static void static void
@ -148,13 +150,11 @@ warn( const char *file, int line, const char *msg, const char *var, int val )
static void static void
error( const char *file, int line, const char *msg, const char *var, int val ) error( const char *file, int line, const char *msg, const char *var, int val )
{ {
if( !noerror ) {
fprintf( stderr, "%s:%d: %s error: %s is %d\n", fprintf( stderr, "%s:%d: %s error: %s is %d\n",
file, line, msg, var, val ); file, line, msg, var, val );
if( !noabort ) if( !noabort )
abort(); abort();
} }
}
static void static void
count_resource_leaks( void ) count_resource_leaks( void )
@ -273,8 +273,8 @@ exit_thread_message( const ldap_pvt_thread_t thread )
#define WRAPPED(ptr) (ptr) #define WRAPPED(ptr) (ptr)
#define SET_OWNER(ptr) ((void) 0) #define SET_OWNER(ptr) ((void) 0)
#define RESET_OWNER(ptr) ((void) 0) #define RESET_OWNER(ptr) ((void) 0)
#define ASSERT_OWNER(ptr) ((void) 0) #define ASSERT_OWNER(ptr, msg) ((void) 0)
#define ASSERT_NO_OWNER(ptr) ((void) 0) #define ASSERT_NO_OWNER(ptr, msg) ((void) 0)
#define alloc_usage(ptr, msg) ((void) 0) #define alloc_usage(ptr, msg) ((void) 0)
#define check_usage(ptr, msg) ((void) 0) #define check_usage(ptr, msg) ((void) 0)
@ -297,19 +297,27 @@ exit_thread_message( const ldap_pvt_thread_t thread )
static const ldap_int_thread_t ldap_debug_thread_none = LDAP_DEBUG_THREAD_NONE; static const ldap_int_thread_t ldap_debug_thread_none = LDAP_DEBUG_THREAD_NONE;
int #define THREAD_MUTEX_OWNER(mutex) \
ldap_debug_thread_mutex_owner( ldap_pvt_thread_mutex_t *mutex ) ldap_pvt_thread_equal( (mutex)->owner, ldap_pvt_thread_self() )
void
ldap_debug_thread_assert_mutex_owner(
const char *file,
int line,
const char *msg,
ldap_pvt_thread_mutex_t *mutex )
{ {
return ldap_pvt_thread_equal( mutex->owner, ldap_pvt_thread_self() ); if( !(noerror || THREAD_MUTEX_OWNER( mutex )) )
error( file, line, "ASSERT_MUTEX_OWNER", msg, 0 );
} }
#define WRAPPED(ptr) (&(ptr)->wrapped) #define WRAPPED(ptr) (&(ptr)->wrapped)
#define SET_OWNER(ptr) ((ptr)->owner = ldap_pvt_thread_self()) #define SET_OWNER(ptr) ((ptr)->owner = ldap_pvt_thread_self())
#define RESET_OWNER(ptr) ((ptr)->owner = ldap_debug_thread_none) #define RESET_OWNER(ptr) ((ptr)->owner = ldap_debug_thread_none)
#define ASSERT_OWNER LDAP_INT_THREAD_ASSERT_MUTEX_OWNER #define ASSERT_OWNER(ptr, msg) ERROR_IF( !THREAD_MUTEX_OWNER( ptr ), msg )
#ifndef ASSERT_NO_OWNER #ifndef ASSERT_NO_OWNER
#define ASSERT_NO_OWNER(ptr) \ #define ASSERT_NO_OWNER(ptr, msg) ERROR_IF( \
assert( ldap_int_thread_equal( (ptr)->owner, ldap_debug_thread_none ) ) !ldap_int_thread_equal( (ptr)->owner, ldap_debug_thread_none ), msg )
#endif #endif
#define INITED_VALUE 0x12345678UL #define INITED_VALUE 0x12345678UL
@ -731,10 +739,10 @@ ldap_pvt_thread_cond_wait(
check_usage( &cond->usage, "ldap_pvt_thread_cond_wait:cond" ); check_usage( &cond->usage, "ldap_pvt_thread_cond_wait:cond" );
check_usage( &mutex->usage, "ldap_pvt_thread_cond_wait:mutex" ); check_usage( &mutex->usage, "ldap_pvt_thread_cond_wait:mutex" );
adjust_count( Idx_locked_mutex, -1 ); adjust_count( Idx_locked_mutex, -1 );
ASSERT_OWNER( mutex ); ASSERT_OWNER( mutex, "ldap_pvt_thread_cond_wait" );
RESET_OWNER( mutex ); /* Breaks if this thread did not own the mutex */ RESET_OWNER( mutex ); /* Breaks if this thread did not own the mutex */
rc = ldap_int_thread_cond_wait( WRAPPED( cond ), WRAPPED( mutex ) ); rc = ldap_int_thread_cond_wait( WRAPPED( cond ), WRAPPED( mutex ) );
ASSERT_NO_OWNER( mutex ); ASSERT_NO_OWNER( mutex, "ldap_pvt_thread_cond_wait" );
SET_OWNER( mutex ); SET_OWNER( mutex );
adjust_count( Idx_locked_mutex, +1 ); adjust_count( Idx_locked_mutex, +1 );
ERROR_IF( rc, "ldap_pvt_thread_cond_wait" ); ERROR_IF( rc, "ldap_pvt_thread_cond_wait" );
@ -762,7 +770,7 @@ ldap_pvt_thread_mutex_destroy( ldap_pvt_thread_mutex_t *mutex )
{ {
int rc; int rc;
check_usage( &mutex->usage, "ldap_pvt_thread_mutex_destroy" ); check_usage( &mutex->usage, "ldap_pvt_thread_mutex_destroy" );
ASSERT_NO_OWNER( mutex ); ASSERT_NO_OWNER( mutex, "ldap_pvt_thread_mutex_destroy" );
rc = ldap_int_thread_mutex_destroy( WRAPPED( mutex ) ); rc = ldap_int_thread_mutex_destroy( WRAPPED( mutex ) );
if( rc ) { if( rc ) {
ERROR( rc, "ldap_pvt_thread_mutex_destroy" ); ERROR( rc, "ldap_pvt_thread_mutex_destroy" );
@ -784,7 +792,7 @@ ldap_pvt_thread_mutex_lock( ldap_pvt_thread_mutex_t *mutex )
if( rc ) { if( rc ) {
ERROR_IF( rc, "ldap_pvt_thread_mutex_lock" ); ERROR_IF( rc, "ldap_pvt_thread_mutex_lock" );
} else { } else {
ASSERT_NO_OWNER( mutex ); ASSERT_NO_OWNER( mutex, "ldap_pvt_thread_mutex_lock" );
SET_OWNER( mutex ); SET_OWNER( mutex );
adjust_count( Idx_locked_mutex, +1 ); adjust_count( Idx_locked_mutex, +1 );
} }
@ -798,7 +806,7 @@ ldap_pvt_thread_mutex_trylock( ldap_pvt_thread_mutex_t *mutex )
check_usage( &mutex->usage, "ldap_pvt_thread_mutex_trylock" ); check_usage( &mutex->usage, "ldap_pvt_thread_mutex_trylock" );
rc = ldap_int_thread_mutex_trylock( WRAPPED( mutex ) ); rc = ldap_int_thread_mutex_trylock( WRAPPED( mutex ) );
if( rc == 0 ) { if( rc == 0 ) {
ASSERT_NO_OWNER( mutex ); ASSERT_NO_OWNER( mutex, "ldap_pvt_thread_mutex_trylock" );
SET_OWNER( mutex ); SET_OWNER( mutex );
adjust_count( Idx_locked_mutex, +1 ); adjust_count( Idx_locked_mutex, +1 );
} }
@ -810,7 +818,7 @@ ldap_pvt_thread_mutex_unlock( ldap_pvt_thread_mutex_t *mutex )
{ {
int rc; int rc;
check_usage( &mutex->usage, "ldap_pvt_thread_mutex_unlock" ); check_usage( &mutex->usage, "ldap_pvt_thread_mutex_unlock" );
ASSERT_OWNER( mutex ); ASSERT_OWNER( mutex, "ldap_pvt_thread_mutex_unlock" );
RESET_OWNER( mutex ); /* Breaks if this thread did not own the mutex */ RESET_OWNER( mutex ); /* Breaks if this thread did not own the mutex */
rc = ldap_int_thread_mutex_unlock( WRAPPED( mutex ) ); rc = ldap_int_thread_mutex_unlock( WRAPPED( mutex ) );
if( rc ) { if( rc ) {