]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
1833. [bug] Race condition in isc_mutex_lock_profile(). [RT #13660]
authorMark Andrews <marka@isc.org>
Wed, 16 Mar 2005 01:56:17 +0000 (01:56 +0000)
committerMark Andrews <marka@isc.org>
Wed, 16 Mar 2005 01:56:17 +0000 (01:56 +0000)
CHANGES
lib/isc/pthreads/mutex.c

diff --git a/CHANGES b/CHANGES
index e839651d5b84ac4a5bd91efdc6734ae18b5ac59d..8fd37aedc3ffe8cd1ce3fad9848e1850e7096de3 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,5 @@
+1833.  [bug]           Race condition in isc_mutex_lock_profile(). [RT #13660]
+
 1832.  [bug]           named fails to return BADKEY on unknown TSIG algorithm.
                        [RT #13620]
 
index d115dc7d852edaa69fcb8a3f4639c3c8c5a3b170..9842643df5796629ed0093894fdfb2b7d663ebc3 100644 (file)
@@ -15,7 +15,7 @@
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: mutex.c,v 1.8 2004/03/05 05:11:16 marka Exp $ */
+/* $Id: mutex.c,v 1.9 2005/03/16 01:56:17 marka Exp $ */
 
 #include <config.h>
 
@@ -126,19 +126,6 @@ isc_mutex_lock_profile(isc_mutex_t *mp, const char *file, int line) {
        isc_mutexlocker_t *locker = NULL;
        int i;
 
-       for (i = 0; i < ISC_MUTEX_MAX_LOCKERS; i++) {
-               if (mp->stats->lockers[i].file == NULL) {
-                       locker = &mp->stats->lockers[i];
-                       locker->file = file;
-                       locker->line = line;
-                       break;
-               } else if (mp->stats->lockers[i].file == file &&
-                          mp->stats->lockers[i].line == line) {
-                       locker = &mp->stats->lockers[i];
-                       break;
-               }
-       }
-
        gettimeofday(&prelock_t, NULL);
 
        if (pthread_mutex_lock(&mp->mutex) != 0)
@@ -152,6 +139,19 @@ isc_mutex_lock_profile(isc_mutex_t *mp, const char *file, int line) {
        mp->stats->count++;
        timevaladd(&mp->stats->wait_total, &postlock_t);
 
+       for (i = 0; i < ISC_MUTEX_MAX_LOCKERS; i++) {
+               if (mp->stats->lockers[i].file == NULL) {
+                       locker = &mp->stats->lockers[i];
+                       locker->file = file;
+                       locker->line = line;
+                       break;
+               } else if (mp->stats->lockers[i].file == file &&
+                          mp->stats->lockers[i].line == line) {
+                       locker = &mp->stats->lockers[i];
+                       break;
+               }
+       }
+
        if (locker != NULL) {
                locker->count++;
                timevaladd(&locker->wait_total, &postlock_t);