From c5831538310f0b61185e52318680f77595926ac2 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Tue, 9 Sep 2008 23:14:15 +0000 Subject: [PATCH] declinatio mortuus obfirmo! git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@9499 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- src/switch_xml.c | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/src/switch_xml.c b/src/switch_xml.c index 2d785fb245..fd3e067d3a 100644 --- a/src/switch_xml.c +++ b/src/switch_xml.c @@ -138,9 +138,11 @@ struct switch_xml_binding { static switch_xml_binding_t *BINDINGS = NULL; static switch_xml_t MAIN_XML_ROOT = NULL; -static switch_memory_pool_t *XML_MEMORY_POOL; -static switch_thread_rwlock_t *RWLOCK; -static switch_thread_rwlock_t *B_RWLOCK; +static switch_memory_pool_t *XML_MEMORY_POOL = NULL; +static switch_thread_rwlock_t *RWLOCK = NULL; +static switch_thread_rwlock_t *B_RWLOCK = NULL; +static switch_mutex_t *XML_LOCK = NULL; +static switch_mutex_t *XML_COUNT_LOCK = NULL; static uint32_t lock_count = 0; struct xml_section_t { @@ -1522,7 +1524,9 @@ SWITCH_DECLARE(switch_status_t) switch_xml_locate_user(const char *key, SWITCH_DECLARE(switch_xml_t) switch_xml_root(void) { + switch_mutex_lock(XML_COUNT_LOCK); lock_count++; + switch_mutex_unlock(XML_COUNT_LOCK); switch_thread_rwlock_rdlock(RWLOCK); return MAIN_XML_ROOT; } @@ -1572,13 +1576,13 @@ SWITCH_DECLARE(switch_xml_t) switch_xml_open_root(uint8_t reload, const char **e uint8_t hasmain = 0, errcnt = 0; switch_xml_t new_main; - //switch_mutex_lock(XML_LOCK); + switch_mutex_lock(XML_LOCK); if (MAIN_XML_ROOT) { hasmain++; if (!reload) { - //switch_mutex_unlock(XML_LOCK); + switch_mutex_unlock(XML_LOCK); return switch_xml_root(); } switch_thread_rwlock_wrlock(RWLOCK); @@ -1610,7 +1614,8 @@ SWITCH_DECLARE(switch_xml_t) switch_xml_open_root(uint8_t reload, const char **e if (hasmain) { switch_thread_rwlock_unlock(RWLOCK); } - //switch_mutex_unlock(XML_LOCK); + + switch_mutex_unlock(XML_LOCK); if (errcnt == 0) { switch_event_t *event; @@ -1631,7 +1636,8 @@ SWITCH_DECLARE(switch_status_t) switch_xml_init(switch_memory_pool_t *pool, cons XML_MEMORY_POOL = pool; *err = "Success"; - //switch_mutex_init(&XML_LOCK, SWITCH_MUTEX_NESTED, XML_MEMORY_POOL); + switch_mutex_init(&XML_LOCK, SWITCH_MUTEX_NESTED, XML_MEMORY_POOL); + switch_mutex_init(&XML_COUNT_LOCK, SWITCH_MUTEX_NESTED, XML_MEMORY_POOL); switch_thread_rwlock_create(&RWLOCK, XML_MEMORY_POOL); switch_thread_rwlock_create(&B_RWLOCK, XML_MEMORY_POOL); @@ -1924,10 +1930,12 @@ SWITCH_DECLARE(void) switch_xml_free(switch_xml_t xml) return; if (switch_test_flag(xml, SWITCH_XML_ROOT)) { + switch_mutex_lock(XML_COUNT_LOCK); if (lock_count > 0) { switch_thread_rwlock_unlock(RWLOCK); lock_count--; } + switch_mutex_unlock(XML_COUNT_LOCK); } if (xml == MAIN_XML_ROOT) {