]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FSCORE-309
authorAnthony Minessale <anthony.minessale@gmail.com>
Wed, 25 Feb 2009 00:56:17 +0000 (00:56 +0000)
committerAnthony Minessale <anthony.minessale@gmail.com>
Wed, 25 Feb 2009 00:56:17 +0000 (00:56 +0000)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@12269 d0543943-73ff-0310-b7d9-9358b9ac24b2

src/switch_xml.c

index e5b77826fbf4642bfdfafe45681a2cc6bc0e8d58..592cb7ff7fb1ac2c2449d37e8f010e15c5a59227 100644 (file)
@@ -142,6 +142,7 @@ 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_GEN_LOCK = NULL;
 
 
 struct xml_section_t {
@@ -1553,12 +1554,12 @@ SWITCH_DECLARE(switch_status_t) switch_xml_locate(const char *section,
                if ((conf = switch_xml_find_child(xml, "section", "name", section)) && (tag = switch_xml_find_child(conf, tag_name, key_name, key_value))) {
                        if (clone) {
                                char *x;
-                               switch_mutex_lock(XML_LOCK);
+                               switch_mutex_lock(XML_GEN_LOCK);
                                x = switch_xml_toxml(tag, SWITCH_FALSE);
+                               switch_mutex_unlock(XML_GEN_LOCK);
                                switch_assert(x);
                                *root = switch_xml_parse_str(x, strlen(x));
                                *node = *root;
-                               switch_mutex_unlock(XML_LOCK);
                                switch_xml_free(xml);
                        } else {
                                *node = tag;
@@ -1904,6 +1905,7 @@ SWITCH_DECLARE(switch_status_t) switch_xml_init(switch_memory_pool_t *pool, cons
        *err = "Success";
 
        switch_mutex_init(&XML_LOCK, SWITCH_MUTEX_NESTED, XML_MEMORY_POOL);
+       switch_mutex_init(&XML_GEN_LOCK, SWITCH_MUTEX_NESTED, XML_MEMORY_POOL);
        switch_thread_rwlock_create(&RWLOCK, XML_MEMORY_POOL);
        switch_thread_rwlock_create(&B_RWLOCK, XML_MEMORY_POOL);