summaryrefslogtreecommitdiff
path: root/libguile/smob.c
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2011-10-23 23:38:51 +0200
committerAndy Wingo <wingo@pobox.com>2011-10-24 12:48:36 +0200
commit203a92b67b6a6c64c9e9f33d99c48f4699ed30e2 (patch)
tree0926fb5490c8e8d311cc263bc9cfebd3669f6978 /libguile/smob.c
parent54a9b981a4e64dd58e1d3dec474b8c397c30c1c9 (diff)
downloadguile-203a92b67b6a6c64c9e9f33d99c48f4699ed30e2.tar.gz
convert internal weak hash table users to use the weak table api
The weak table API isn't public yet. It could be after some review. But we can go ahead and use it now internally. * libguile/foreign.c: * libguile/goops.c: * libguile/objprop.c: * libguile/procprop.c: * libguile/smob.c: * libguile/srcprop.c: Update weak table users to new API. No locking needed!
Diffstat (limited to 'libguile/smob.c')
-rw-r--r--libguile/smob.c11
1 files changed, 3 insertions, 8 deletions
diff --git a/libguile/smob.c b/libguile/smob.c
index ef3f56459..ab8208ccc 100644
--- a/libguile/smob.c
+++ b/libguile/smob.c
@@ -418,16 +418,13 @@ scm_set_smob_apply (scm_t_bits tc, SCM (*apply) (),
}
static SCM tramp_weak_map = SCM_BOOL_F;
-static scm_i_pthread_mutex_t tramp_lock = SCM_I_PTHREAD_MUTEX_INITIALIZER;
SCM
scm_i_smob_apply_trampoline (SCM smob)
{
SCM tramp;
- scm_i_pthread_mutex_lock (&tramp_lock);
- tramp = scm_hashq_ref (tramp_weak_map, smob, SCM_BOOL_F);
- scm_i_pthread_mutex_unlock (&tramp_lock);
+ tramp = scm_weak_table_refq (tramp_weak_map, smob, SCM_BOOL_F);
if (scm_is_true (tramp))
return tramp;
@@ -447,9 +444,7 @@ scm_i_smob_apply_trampoline (SCM smob)
/* Race conditions (between the ref and this set!) cannot cause
any harm here. */
- scm_i_pthread_mutex_lock (&tramp_lock);
- scm_hashq_set_x (tramp_weak_map, smob, tramp);
- scm_i_pthread_mutex_unlock (&tramp_lock);
+ scm_weak_table_putq_x (tramp_weak_map, smob, tramp);
return tramp;
}
}
@@ -677,7 +672,7 @@ scm_smob_prehistory ()
scm_smobs[i].apply_trampoline_objcode = SCM_BOOL_F;
}
- tramp_weak_map = scm_make_weak_key_hash_table (SCM_UNDEFINED);
+ tramp_weak_map = scm_c_make_weak_table (0, SCM_WEAK_TABLE_KIND_KEY);
}
/*