From 868856a81c46c524f3883eb213cc6bd9b90d9ff7 Mon Sep 17 00:00:00 2001 From: Michael Jerris Date: Tue, 16 Dec 2008 21:29:07 +0000 Subject: [PATCH] SFSIP-107 don't destroy locked mutex git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@10837 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- libs/sofia-sip/libsofia-sip-ua/su/su_alloc.c | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/libs/sofia-sip/libsofia-sip-ua/su/su_alloc.c b/libs/sofia-sip/libsofia-sip-ua/su/su_alloc.c index ffc089765b..41c30829ae 100644 --- a/libs/sofia-sip/libsofia-sip-ua/su/su_alloc.c +++ b/libs/sofia-sip/libsofia-sip-ua/su/su_alloc.c @@ -1020,17 +1020,15 @@ void _su_home_deinit(su_home_t *home) home->suh_blocks = NULL; if (home->suh_lock) { -#ifdef WIN32 - UNLOCK(home); /* we must unlock here or windows leaks handles on the next call because the mutex is locked */ -#endif -/* "In the LinuxThreads implementation, no resources are associated with mutex objects, - thus pthread_mutex_destroy actually does nothing except checking that the mutex is unlocked. " - In the Windows pthread implementation we must free the handles that are allocated */ - _su_home_destroy_mutexes(home->suh_lock); + void *suh_lock = home->suh_lock; + + home->suh_lock = NULL; + + /* Unlock, or risk assert() or leak handles on Windows */ + _su_home_unlocker(suh_lock); + _su_home_destroy_mutexes(suh_lock); } } - - home->suh_lock = NULL; } /** Free memory blocks allocated through home.