# HG changeset patch # User Sebastien Decugis # Date 1273470186 -32400 # Node ID ec67c5096eebaf151346677bd748964120ad79ad # Parent a77ed0e30ac96affb0b1b3e7af94b088c3cd2a89 Fix small issue with access to freed memory diff -r a77ed0e30ac9 -r ec67c5096eeb libfreeDiameter/sessions.c --- a/libfreeDiameter/sessions.c Mon May 10 14:26:42 2010 +0900 +++ b/libfreeDiameter/sessions.c Mon May 10 14:43:06 2010 +0900 @@ -590,16 +590,18 @@ int fd_sess_reclaim ( struct session ** session ) { struct session * sess; + uint32_t hash; TRACE_ENTRY("%p", session); CHECK_PARAMS( session && VALIDATE_SI(*session) ); sess = *session; + hash = sess->hash; *session = NULL; - CHECK_FCT( pthread_mutex_lock( H_LOCK(sess->hash) ) ); + CHECK_POSIX( pthread_mutex_lock( H_LOCK(sess->hash) ) ); pthread_cleanup_push( fd_cleanup_mutex, H_LOCK(sess->hash) ); - CHECK_FCT( pthread_mutex_lock( &exp_lock ) ); + CHECK_POSIX( pthread_mutex_lock( &exp_lock ) ); if (FD_IS_LIST_EMPTY(&sess->states)) { fd_list_unlink( &sess->chain_h ); fd_list_unlink( &sess->expire ); @@ -607,9 +609,9 @@ free(sess->sid); free(sess); } - CHECK_FCT( pthread_mutex_unlock( &exp_lock ) ); + CHECK_POSIX( pthread_mutex_unlock( &exp_lock ) ); pthread_cleanup_pop(0); - CHECK_FCT( pthread_mutex_unlock( H_LOCK(sess->hash) ) ); + CHECK_POSIX( pthread_mutex_unlock( H_LOCK(hash) ) ); return 0; }