[libxml2] Windows Critical sections not released correctly



commit 8854e4631844eac8dbae10cc32904f27d5268af7
Author: Daniel Veillard <veillard redhat com>
Date:   Mon Oct 13 15:03:58 2014 +0800

    Windows Critical sections not released correctly
    
    For https://bugzilla.gnome.org/show_bug.cgi?id=737851
    Based on report from mike vanduzee caris com , we were missing calling
    LeaveCriticalSection() when count was down to 0 hence not freeing
    adequately the related resource.

 threads.c |    6 ++++--
 1 files changed, 4 insertions(+), 2 deletions(-)
---
diff --git a/threads.c b/threads.c
index f2f2703..8921204 100644
--- a/threads.c
+++ b/threads.c
@@ -378,7 +378,7 @@ xmlRMutexLock(xmlRMutexPtr tok)
     pthread_mutex_unlock(&tok->lock);
 #elif defined HAVE_WIN32_THREADS
     EnterCriticalSection(&tok->cs);
-    ++tok->count;
+    tok->count++;
 #elif defined HAVE_BEOS_THREADS
     if (tok->lock->tid == find_thread(NULL)) {
         tok->count++;
@@ -414,8 +414,10 @@ xmlRMutexUnlock(xmlRMutexPtr tok ATTRIBUTE_UNUSED)
     }
     pthread_mutex_unlock(&tok->lock);
 #elif defined HAVE_WIN32_THREADS
-    if (!--tok->count)
+    if (tok->count > 0) {
         LeaveCriticalSection(&tok->cs);
+       tok->count--;
+    }
 #elif defined HAVE_BEOS_THREADS
     if (tok->lock->tid == find_thread(NULL)) {
         tok->count--;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]