apr-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From roo...@apache.org
Subject svn commit: r372615 - in /apr/apr/branches/0.9.x: CHANGES locks/win32/thread_rwlock.c test/testlock.c
Date Thu, 26 Jan 2006 21:43:51 GMT
Author: rooneg
Date: Thu Jan 26 13:43:50 2006
New Revision: 372615

URL: http://svn.apache.org/viewcvs?rev=372615&view=rev
Log:
Merge r371172 to 0.9.x.

Original log message:

Fix an assert that occurs when you destroy a rwlock on win32 and later clear
the pool it was allocated from.

Submitted by: Evgueni Brevnov <evgueni.brevnov gmail.com>

* locks/win32/thread_rwlock.c
  (apr_thread_rwlock_destroy): Use apr_pool_cleanup_run to call our cleanup
   function.
  (thread_rwlock_cleanup): Put the destruction of the rwlock here instead
   of in the destructor function.

* test/testlock.c
  (test_thread_rwlocks): Destroy the rwlock explicitly so we can see this
   kind of problem.

* CHANGES: Note change.

Modified:
    apr/apr/branches/0.9.x/CHANGES
    apr/apr/branches/0.9.x/locks/win32/thread_rwlock.c
    apr/apr/branches/0.9.x/test/testlock.c

Modified: apr/apr/branches/0.9.x/CHANGES
URL: http://svn.apache.org/viewcvs/apr/apr/branches/0.9.x/CHANGES?rev=372615&r1=372614&r2=372615&view=diff
==============================================================================
--- apr/apr/branches/0.9.x/CHANGES (original)
+++ apr/apr/branches/0.9.x/CHANGES Thu Jan 26 13:43:50 2006
@@ -2,6 +2,9 @@
 
   *) Keep testpipe.c from hanging on win32. [Garrett Rooney]
 
+  *) Fix assertion from double close of a handle with a rwlock on win32.
+     [Evgueni Brevnov <evgueni.brevnov gmail.com>]
+
   *) Documented that apr_stat and apr_dir_read can return APR_INCOMPLETE,
      and how to determine which parts of the resulting apr_finfo_t can be
      used in such a case.

Modified: apr/apr/branches/0.9.x/locks/win32/thread_rwlock.c
URL: http://svn.apache.org/viewcvs/apr/apr/branches/0.9.x/locks/win32/thread_rwlock.c?rev=372615&r1=372614&r2=372615&view=diff
==============================================================================
--- apr/apr/branches/0.9.x/locks/win32/thread_rwlock.c (original)
+++ apr/apr/branches/0.9.x/locks/win32/thread_rwlock.c Thu Jan 26 13:43:50 2006
@@ -23,7 +23,15 @@
 
 static apr_status_t thread_rwlock_cleanup(void *data)
 {
-    return apr_thread_rwlock_destroy((apr_thread_rwlock_t *) data);
+    apr_thread_rwlock_t *rwlock = data;
+    
+    if (! CloseHandle(rwlock->read_event))
+        return apr_get_os_error();
+
+    if (! CloseHandle(rwlock->write_mutex))
+        return apr_get_os_error();
+    
+    return APR_SUCCESS;
 }
 
 APR_DECLARE(apr_status_t)apr_thread_rwlock_create(apr_thread_rwlock_t **rwlock,
@@ -151,13 +159,7 @@
 
 APR_DECLARE(apr_status_t) apr_thread_rwlock_destroy(apr_thread_rwlock_t *rwlock)
 {
-    if (! CloseHandle(rwlock->read_event))
-        return apr_get_os_error();
-
-    if (! CloseHandle(rwlock->write_mutex))
-        return apr_get_os_error();
-    
-    return APR_SUCCESS;
+    return apr_pool_cleanup_run(rwlock->pool, rwlock, thread_rwlock_cleanup);
 }
 
 APR_POOL_IMPLEMENT_ACCESSOR(thread_rwlock)

Modified: apr/apr/branches/0.9.x/test/testlock.c
URL: http://svn.apache.org/viewcvs/apr/apr/branches/0.9.x/test/testlock.c?rev=372615&r1=372614&r2=372615&view=diff
==============================================================================
--- apr/apr/branches/0.9.x/test/testlock.c (original)
+++ apr/apr/branches/0.9.x/test/testlock.c Thu Jan 26 13:43:50 2006
@@ -205,6 +205,8 @@
     apr_thread_join(&s4, t4);
 
     CuAssertIntEquals(tc, MAX_ITER, x);
+
+    apr_thread_rwlock_destroy(rwlock);
 }
 
 static void test_cond(CuTest *tc)



Mime
View raw message