Return-Path: Delivered-To: apmail-apr-dev-archive@www.apache.org Received: (qmail 64909 invoked from network); 8 Jun 2005 23:55:31 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 8 Jun 2005 23:55:31 -0000 Received: (qmail 95110 invoked by uid 500); 8 Jun 2005 23:55:30 -0000 Delivered-To: apmail-apr-dev-archive@apr.apache.org Received: (qmail 95014 invoked by uid 500); 8 Jun 2005 23:55:29 -0000 Mailing-List: contact dev-help@apr.apache.org; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Id: Delivered-To: mailing list dev@apr.apache.org Received: (qmail 94996 invoked by uid 99); 8 Jun 2005 23:55:29 -0000 X-ASF-Spam-Status: No, hits=0.1 required=10.0 tests=FORGED_RCVD_HELO X-Spam-Check-By: apache.org Received-SPF: pass (hermes.apache.org: local policy) Received: from eth8079.sa.adsl.internode.on.net (HELO mail.optimatics.com.au) (150.101.82.142) by apache.org (qpsmtpd/0.28) with ESMTP; Wed, 08 Jun 2005 16:55:28 -0700 Received: (qmail 10652 invoked by uid 89); 8 Jun 2005 23:42:23 -0000 Received: from unknown (HELO shadow.optimatics.com.au) (192.168.0.80) by 0 with SMTP; 8 Jun 2005 23:42:23 -0000 Date: Thu, 9 Jun 2005 09:15:52 +0930 From: David McIver X-Mailer: The Bat! (v3.5.25) Professional Reply-To: David McIver Organization: Optimatics Pty Ltd X-Priority: 3 (Normal) Message-ID: <1744166867.20050609091552@optimatics.com> To: dev@apr.apache.org Subject: [patch] rwlock cleanup function not removed from pool MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Virus-Checked: Checked X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N Hi, On windows, an rwlock's cleanup function was not being removed from its pool when the rwlock was destroyed. Patch below. Cheers, Dave Index: locks/win32/thread_rwlock.c =================================================================== --- locks/win32/thread_rwlock.c (revision 188670) +++ locks/win32/thread_rwlock.c (working copy) @@ -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)