From a722bcaa13acd3185e8e7b84f64cb614a46f3532 Mon Sep 17 00:00:00 2001 From: Ken Raeburn Date: Sun, 20 May 2012 05:22:01 -0400 Subject: [PATCH] Fix lock handling bug in commit aac980de43a0466b968a56607664f5ebbca6b751. * libguile/weak-set.c (resize_set): When releasing a lock temporarily to do an allocation, re-lock it afterwards, instead of unlocking again. * libguile/weak-table.c (resize_table): Likewise. --- libguile/weak-set.c | 2 +- libguile/weak-table.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/libguile/weak-set.c b/libguile/weak-set.c index bdabedf9d..33402b548 100644 --- a/libguile/weak-set.c +++ b/libguile/weak-set.c @@ -362,7 +362,7 @@ resize_set (scm_t_weak_set *set) run anything, so drop our lock to avoid deadlocks. */ new_entries = scm_gc_malloc_pointerless (new_size * sizeof(scm_t_weak_entry), "weak set"); - scm_i_pthread_mutex_unlock (&set->lock); + scm_i_pthread_mutex_lock (&set->lock); } while (!is_acceptable_size_index (set, new_size_index)); diff --git a/libguile/weak-table.c b/libguile/weak-table.c index 6a3fecd3e..be73e1bfa 100644 --- a/libguile/weak-table.c +++ b/libguile/weak-table.c @@ -484,7 +484,7 @@ resize_table (scm_t_weak_table *table) /* Allocating memory might cause finalizers to run, which could run anything, so drop our lock to avoid deadlocks. */ new_entries = allocate_entries (new_size, table->kind); - scm_i_pthread_mutex_unlock (&table->lock); + scm_i_pthread_mutex_lock (&table->lock); } while (!is_acceptable_size_index (table, new_size_index));