summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2011-11-08 19:17:23 +0100
committerAndy Wingo <wingo@pobox.com>2011-11-08 19:18:20 +0100
commit215fe3a89119319fa0bb953ede574b38bea143ab (patch)
treedce86c079fd080effdde15138d7605f28118ac1b
parent14dcb5ccd282622abd71aed3e41235d90f89d39d (diff)
downloadguile-215fe3a89119319fa0bb953ede574b38bea143ab.tar.gz
lock ports in `write' and `display'
* libguile/print.c (scm_write, scm_display): Lock the port during `display' and `write' calls. Fixes https://savannah.gnu.org/bugs/?33996.
-rw-r--r--libguile/print.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/libguile/print.c b/libguile/print.c
index 62cf2a10f..6e1ff802f 100644
--- a/libguile/print.c
+++ b/libguile/print.c
@@ -1294,7 +1294,11 @@ scm_write (SCM obj, SCM port)
SCM_ASSERT (scm_valid_oport_value_p (port), port, SCM_ARG2, s_write);
+ scm_dynwind_begin (0);
+ scm_dynwind_lock_port (port);
scm_prin1 (obj, port, 1);
+ scm_dynwind_end ();
+
return SCM_UNSPECIFIED;
}
@@ -1309,7 +1313,11 @@ scm_display (SCM obj, SCM port)
SCM_ASSERT (scm_valid_oport_value_p (port), port, SCM_ARG2, s_display);
+ scm_dynwind_begin (0);
+ scm_dynwind_lock_port (port);
scm_prin1 (obj, port, 0);
+ scm_dynwind_end ();
+
return SCM_UNSPECIFIED;
}