run finalizers asynchronously in asyncs
authorAndy Wingo <wingo@pobox.com>
Fri, 24 Feb 2012 12:18:48 +0000 (13:18 +0100)
committerAndy Wingo <wingo@pobox.com>
Thu, 8 Mar 2012 12:12:10 +0000 (13:12 +0100)
commitf740445a9b5bf0a5e5090f0a2ddaffb2b803bab7
tree0b52f7545433314fd41e83fcca8db5108fdfd87a
parent75ba64d6797f5857cc9885eb753126119a8c8b68
run finalizers asynchronously in asyncs

* libguile/finalizers.c: New excitement!  We'll be running finalizers
  asynchronously, from asyncs.  This will make it safer to allocate
  while holding a mutex.
  (GC_set_finalizer_notifier): Add back-compat shim.

* libguile/init.c (scm_i_init_guile): Init the async finalizer mechanism
  during boot.

* libguile/gc.c (scm_storage_prehistory): Tell libgc we'll be finalizing
  on demand.
  (scm_gc): Explicitly run finalizers here.

* libguile/threads.c (guilify_self_2): Run finalizers here if
  queue_finalizer_async happened to run during guilify_self_1.

* configure.ac: Add check for GC_set_finalizer_notifier.
configure.ac
libguile/finalizers.c
libguile/gc.c
libguile/init.c
libguile/threads.c