1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-10 14:00:21 +02:00

Fix lock handling bug in commit aac980de43.

* 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.
This commit is contained in:
Ken Raeburn 2012-05-20 05:22:01 -04:00
parent 730af462c3
commit a722bcaa13
2 changed files with 2 additions and 2 deletions

View file

@ -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));

View file

@ -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));