diff options
author | Andy Wingo <wingo@pobox.com> | 2011-10-23 23:38:51 +0200 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2011-10-24 12:48:36 +0200 |
commit | 203a92b67b6a6c64c9e9f33d99c48f4699ed30e2 (patch) | |
tree | 0926fb5490c8e8d311cc263bc9cfebd3669f6978 /libguile/smob.c | |
parent | 54a9b981a4e64dd58e1d3dec474b8c397c30c1c9 (diff) | |
download | guile-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.c | 11 |
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); } /* |