summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2008-10-16 12:55:27 +0200
committerAndy Wingo <wingo@pobox.com>2008-10-16 12:55:27 +0200
commit28a2f57bde42030e96b4c2ab574336c6e8c394b5 (patch)
tree22ecb529d9e75e3ef24d446646cb0888bf5886e8
parent2588eccdf4b69272f978305c7c79eb4c7975b92f (diff)
downloadguile-28a2f57bde42030e96b4c2ab574336c6e8c394b5.tar.gz
fix asyncs running in the vm; re-enable popen.scm compilation
* libguile/vm-i-system.c (goto/args): Sync the registers before doing the SCM_TICK. We probably need a different SCM_TICK that saves the regs only if necessary. This fixes GC problems with a compiled popen.scm. * ice-9/Makefile.am: Re-enable popen.scm compilation.
-rw-r--r--ice-9/Makefile.am7
-rw-r--r--libguile/vm-i-system.c1
2 files changed, 3 insertions, 5 deletions
diff --git a/ice-9/Makefile.am b/ice-9/Makefile.am
index 134d6f7b3..43e5284b3 100644
--- a/ice-9/Makefile.am
+++ b/ice-9/Makefile.am
@@ -36,7 +36,7 @@ SOURCES = psyntax-pp.scm boot-9.scm \
format.scm getopt-long.scm hcons.scm i18n.scm \
lineio.scm ls.scm mapping.scm \
networking.scm null.scm optargs.scm poe.scm \
- posix.scm q.scm r4rs.scm r5rs.scm \
+ popen.scm posix.scm q.scm r4rs.scm r5rs.scm \
rdelim.scm receive.scm regex.scm runq.scm rw.scm \
safe-r5rs.scm safe.scm session.scm slib.scm stack-catch.scm \
streams.scm string-fun.scm syncase.scm threads.scm \
@@ -49,16 +49,13 @@ SOURCES = psyntax-pp.scm boot-9.scm \
# snarf-check-and-output-texi) fails. need to figure out what the
# problem is.
#
-# popen.scm compiles, but then breaks the test suite via random lost gc
-# references. need to figure out what's going on there.
-#
# occam-channel and gds-client use goops, which is not yet vm-compatible
# (it does some compilation-like optimizations for the interpreter), so
# punt on them for the time being.
#
# psyntax.scm needs help. fortunately it's only needed when recompiling
# psyntax-pp.scm.
-NOCOMP_SOURCES = match.scm occam-channel.scm gds-client.scm psyntax.scm popen.scm
+NOCOMP_SOURCES = match.scm occam-channel.scm gds-client.scm psyntax.scm
include $(top_srcdir)/guilec.mk
diff --git a/libguile/vm-i-system.c b/libguile/vm-i-system.c
index 251239493..80eb9249a 100644
--- a/libguile/vm-i-system.c
+++ b/libguile/vm-i-system.c
@@ -604,6 +604,7 @@ VM_DEFINE_INSTRUCTION (goto_args, "goto/args", 1, -1, 1)
vm_goto_args:
x = sp[-nargs];
+ SYNC_REGISTER ();
SCM_TICK; /* allow interrupt here */
/*