forked from Mirrors/freeswitch
declinatio mortuus obfirmo!
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@9499 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
parent
8ec9b8f7cb
commit
c583153831
@ -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) {
|
||||
|
Loading…
Reference in New Issue
Block a user