aboutsummaryrefslogtreecommitdiff
path: root/gdb/guile
diff options
context:
space:
mode:
authorDoug Evans <xdje42@gmail.com>2014-07-26 14:49:04 -0700
committerDoug Evans <xdje42@gmail.com>2014-07-26 14:49:04 -0700
commit74edf51613b507d1f27d66360cd8fdd8a253e88a (patch)
tree84684e1d765768195a9011b645838a62bcbd67aa /gdb/guile
parente57e6ddc2e768323732a7eed6a5d25d3ee350638 (diff)
downloadgdb-74edf51613b507d1f27d66360cd8fdd8a253e88a.zip
gdb-74edf51613b507d1f27d66360cd8fdd8a253e88a.tar.gz
gdb-74edf51613b507d1f27d66360cd8fdd8a253e88a.tar.bz2
PR 17185
PR 17185 describes a problem with using gdb+guile with libgc 7.4.0. The symptom is a hang in sigsuspend. [The thread referenced in the PR has the details.] It's not clear what the right fix is, or even where the bug is yet. This patch applies the same workaround Guile has applied. There is no functionality or real performance loss with this, and Guile has been using it for awhile. * configure.ac: Add check for header gc/gc.h. Add check for function setenv. * configure: Regenerate. * config.in: Regenerate. * guile/guile.c (_initialize_guile): Add workaround for libgc 7.4.0.
Diffstat (limited to 'gdb/guile')
-rw-r--r--gdb/guile/guile.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/gdb/guile/guile.c b/gdb/guile/guile.c
index 05dba69..6bc078f 100644
--- a/gdb/guile/guile.c
+++ b/gdb/guile/guile.c
@@ -35,6 +35,9 @@
#ifdef HAVE_GUILE
#include "guile.h"
#include "guile-internal.h"
+#ifdef HAVE_GC_GC_H
+#include <gc/gc.h> /* PR 17185 */
+#endif
#endif
/* The Guile version we're using.
@@ -750,6 +753,18 @@ _initialize_guile (void)
side to define module "gdb" which imports "_gdb". There is evidently no
similar convention in Guile so we skip this. */
+ /* PR 17185 There are problems with using libgc 7.4.0.
+ Copy over the workaround Guile uses (Guile is working around a different
+ problem, but the workaround is the same). */
+#if (GC_VERSION_MAJOR == 7 && GC_VERSION_MINOR == 4 && GC_VERSION_MICRO == 0)
+ /* The bug is only known to appear with pthreads. We assume any system
+ using pthreads also uses setenv (and not putenv). That is why we don't
+ have a similar call to putenv here. */
+#if defined (HAVE_SETENV)
+ setenv ("GC_MARKERS", "1", 1);
+#endif
+#endif
+
/* scm_with_guile is the most portable way to initialize Guile.
Plus we need to initialize the Guile support while in Guile mode
(e.g., called from within a call to scm_with_guile). */