You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@apr.apache.org by ro...@apache.org on 2006/01/26 05:28:35 UTC
svn commit: r372430 - in /apr/apr/branches/1.2.x: CHANGES
locks/win32/thread_rwlock.c test/testlock.c
Author: rooneg
Date: Wed Jan 25 20:28:34 2006
New Revision: 372430
URL: http://svn.apache.org/viewcvs?rev=372430&view=rev
Log:
Merge r371172 to 1.2.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/1.2.x/CHANGES
apr/apr/branches/1.2.x/locks/win32/thread_rwlock.c
apr/apr/branches/1.2.x/test/testlock.c
Modified: apr/apr/branches/1.2.x/CHANGES
URL: http://svn.apache.org/viewcvs/apr/apr/branches/1.2.x/CHANGES?rev=372430&r1=372429&r2=372430&view=diff
==============================================================================
--- apr/apr/branches/1.2.x/CHANGES (original)
+++ apr/apr/branches/1.2.x/CHANGES Wed Jan 25 20:28:34 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/1.2.x/locks/win32/thread_rwlock.c
URL: http://svn.apache.org/viewcvs/apr/apr/branches/1.2.x/locks/win32/thread_rwlock.c?rev=372430&r1=372429&r2=372430&view=diff
==============================================================================
--- apr/apr/branches/1.2.x/locks/win32/thread_rwlock.c (original)
+++ apr/apr/branches/1.2.x/locks/win32/thread_rwlock.c Wed Jan 25 20:28:34 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/1.2.x/test/testlock.c
URL: http://svn.apache.org/viewcvs/apr/apr/branches/1.2.x/test/testlock.c?rev=372430&r1=372429&r2=372430&view=diff
==============================================================================
--- apr/apr/branches/1.2.x/test/testlock.c (original)
+++ apr/apr/branches/1.2.x/test/testlock.c Wed Jan 25 20:28:34 2006
@@ -209,6 +209,8 @@
apr_thread_join(&s4, t4);
ABTS_INT_EQUAL(tc, MAX_ITER, x);
+
+ apr_thread_rwlock_destroy(rwlock);
}
static void test_cond(abts_case *tc, void *data)