[guile] Run finalizers from GDB thread
Commit Message
Hi :)
On Sat 26 Apr 2014 22:26, Doug Evans <xdje42@gmail.com> writes:
> Andy Wingo <wingo@igalia.com> writes:
>
>> gdb/ChangeLog:
>> * guile/guile.c (_initialize_guile): Disable automatic
>> finalization, if Guile offers us that possibility.
>>
>> * guile/guile.c (call_initialize_gdb_module):
>> * guile/scm-safe-call.c (gdbscm_with_catch): Arrange to run
>> finalizers in appropriate places.
>>
>> * configure.ac: Add a check for
>> scm_set_automatic_finalization_enabled.
>
> Hi. Ok with a few nits.
>
> 1) Since all of these changes are related, don't separate them with
> blank lines in the changelog entry.
>
> 2) Write the configure.ac entry as:
> * configure.ac (AC_TRY_LIBGUILE): Add a check for
> scm_set_automatic_finalization_enabled.
>
> 3) Include the changelog entry for configure being regenerated, even
> though it's not included in the patch:
> * configure: Regenerate.
Updated patch to fix nits. Cheers!
Andy
Comments
Andy Wingo <wingo@igalia.com> writes:
> Hi :)
>
> On Sat 26 Apr 2014 22:26, Doug Evans <xdje42@gmail.com> writes:
>
>> Andy Wingo <wingo@igalia.com> writes:
>>
>>> gdb/ChangeLog:
>>> * guile/guile.c (_initialize_guile): Disable automatic
>>> finalization, if Guile offers us that possibility.
>>>
>>> * guile/guile.c (call_initialize_gdb_module):
>>> * guile/scm-safe-call.c (gdbscm_with_catch): Arrange to run
>>> finalizers in appropriate places.
>>>
>>> * configure.ac: Add a check for
>>> scm_set_automatic_finalization_enabled.
>>
>> Hi. Ok with a few nits.
>>
>> 1) Since all of these changes are related, don't separate them with
>> blank lines in the changelog entry.
>>
>> 2) Write the configure.ac entry as:
>> * configure.ac (AC_TRY_LIBGUILE): Add a check for
>> scm_set_automatic_finalization_enabled.
>>
>> 3) Include the changelog entry for configure being regenerated, even
>> though it's not included in the patch:
>> * configure: Regenerate.
>
> Updated patch to fix nits. Cheers!
>
> Andy
>
>
> From 4a9919c3e731f0210cfbcfbbb6040189f46a7fbb Mon Sep 17 00:00:00 2001
> From: Andy Wingo <wingo@igalia.com>
> Date: Tue, 10 Feb 2015 15:26:24 +0100
> Subject: [PATCH] [guile] Run finalizers from GDB thread
>
> gdb/ChangeLog:
> * guile/guile.c (_initialize_guile): Disable automatic
> finalization, if Guile offers us that possibility.
> * guile/guile.c (call_initialize_gdb_module):
> * guile/scm-safe-call.c (gdbscm_with_catch): Arrange to run
> finalizers in appropriate places.
> * configure.ac (AC_TRY_LIBGUILE): Add a check for
> scm_set_automatic_finalization_enabled.
> * configure: Regenerated.
Thanks.
LGTM
From 4a9919c3e731f0210cfbcfbbb6040189f46a7fbb Mon Sep 17 00:00:00 2001
From: Andy Wingo <wingo@igalia.com>
Date: Tue, 10 Feb 2015 15:26:24 +0100
Subject: [PATCH] [guile] Run finalizers from GDB thread
gdb/ChangeLog:
* guile/guile.c (_initialize_guile): Disable automatic
finalization, if Guile offers us that possibility.
* guile/guile.c (call_initialize_gdb_module):
* guile/scm-safe-call.c (gdbscm_with_catch): Arrange to run
finalizers in appropriate places.
* configure.ac (AC_TRY_LIBGUILE): Add a check for
scm_set_automatic_finalization_enabled.
* configure: Regenerated.
---
gdb/ChangeLog | 11 +++++++++++
gdb/configure.ac | 5 +++++
gdb/guile/guile.c | 11 +++++++++++
gdb/guile/scm-safe-call.c | 4 ++++
4 files changed, 31 insertions(+)
@@ -1,3 +1,14 @@
+2015-02-10 Andy Wingo <wingo@igalia.com>
+
+ * guile/guile.c (_initialize_guile): Disable automatic
+ finalization, if Guile offers us that possibility.
+ * guile/guile.c (call_initialize_gdb_module):
+ * guile/scm-safe-call.c (gdbscm_with_catch): Arrange to run
+ finalizers in appropriate places.
+ * configure.ac (AC_TRY_LIBGUILE): Add a check for
+ scm_set_automatic_finalization_enabled.
+ * configure: Regenerated.
+
2014-04-17 Andy Wingo <wingo@igalia.com>
* configure.ac: When Guile is available, check for the
@@ -1085,6 +1085,11 @@ AC_DEFUN([AC_TRY_LIBGUILE],
GUILE_CPPFLAGS=$new_CPPFLAGS
GUILE_LIBS=$new_LIBS],
[found_usable_guile=no])
+ dnl scm_set_automatic_finalization_enabled added in Guile 2.2.
+ AC_CHECK_FUNC(scm_set_automatic_finalization_enabled,
+ AC_DEFINE(HAVE_GUILE_MANUAL_FINALIZATION, 1,
+ [Define if Guile supports manual finalization.])
+ )
CPPFLAGS=$save_CPPFLAGS
LIBS=$save_LIBS
if test "${found_usable_guile}" = no; then
@@ -698,6 +698,10 @@ call_initialize_gdb_module (void *data)
performed within the desired module. */
scm_c_define_module (gdbscm_module_name, initialize_gdb_module, NULL);
+#if HAVE_GUILE_MANUAL_FINALIZATION
+ scm_run_finalizers ();
+#endif
+
return NULL;
}
@@ -844,6 +848,13 @@ _initialize_guile (void)
side to define module "gdb" which imports "_gdb". There is evidently no
similar convention in Guile so we skip this. */
+#if HAVE_GUILE_MANUAL_FINALIZATION
+ /* Our SMOB free functions are not thread-safe, as GDB itself is not
+ intended to be thread-safe. Disable automatic finalization so that
+ finalizers aren't run in other threads. */
+ scm_set_automatic_finalization_enabled (0);
+#endif
+
#ifdef HAVE_SIGPROCMASK
/* Before we initialize Guile, block SIGCHLD.
This is done so that all threads created during Guile initialization
@@ -155,6 +155,10 @@ gdbscm_with_catch (void *data)
d->unwind_handler, d,
d->pre_unwind_handler, d);
+#if HAVE_GUILE_MANUAL_FINALIZATION
+ scm_run_finalizers ();
+#endif
+
return NULL;
}
--
2.1.4