diff --git a/gnu/local.mk b/gnu/local.mk
index 1f48fddc9e..b0d1af5cb3 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1048,8 +1048,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/ccextractor-add-missing-header.patch	\
   %D%/packages/patches/ccextractor-autoconf-tesseract.patch	\
   %D%/packages/patches/ccextractor-fix-ocr.patch		\
-  %D%/packages/patches/chez-scheme-backport-configure.patch	\
-  %D%/packages/patches/chez-scheme-backport-signal.patch	\
   %D%/packages/patches/chez-scheme-bin-sh.patch			\
   %D%/packages/patches/circos-remove-findbin.patch		\
   %D%/packages/patches/cdparanoia-fpic.patch			\
diff --git a/gnu/packages/chez.scm b/gnu/packages/chez.scm
index a24e8aaf79..02bedaa4cf 100644
--- a/gnu/packages/chez.scm
+++ b/gnu/packages/chez.scm
@@ -5,6 +5,7 @@
 ;;; Copyright © 2019 Brett Gilio <brettg@gnu.org>
 ;;; Copyright © 2020 Brendan Tildesley <mail@brendan.scot>
 ;;; Copyright © 2021-2024 Philip McGrath <philip@philipmcgrath.com>
+;;; Copyright © 2024 Ashish SHUKLA <ashish.is@lostca.se>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -500,7 +501,7 @@ (define-public chez-scheme
     (name "chez-scheme")
     ;; The version should match `(scheme-version-number #t)`.
     ;; See s/cmacros.ss c. line 360.
-    (version "10.0.0")
+    (version "10.1.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -508,11 +509,9 @@ (define-public chez-scheme
                     (commit (string-append "v" version))))
               (sha256
                (base32
-                "1q66vafhiwk617z51qkm1v64r3bxqhhf5lzrmsa4l9d5yhvlyk09"))
+                "0y07n2has2592g41zgl275as2wbw1fqd2y7a34llpbqnfpc7923s"))
               (file-name (git-file-name name version))
-              (patches (search-patches "chez-scheme-backport-configure.patch"
-                                       "chez-scheme-backport-signal.patch"
-                                       "chez-scheme-bin-sh.patch"))
+              (patches (search-patches "chez-scheme-bin-sh.patch"))
               (snippet #~(begin
                            (use-modules (guix build utils))
                            ;; TODO: consider putting this in a (guix ...) or
diff --git a/gnu/packages/patches/chez-scheme-backport-configure.patch b/gnu/packages/patches/chez-scheme-backport-configure.patch
deleted file mode 100644
index 584dcb3f0b..0000000000
--- a/gnu/packages/patches/chez-scheme-backport-configure.patch
+++ /dev/null
@@ -1,463 +0,0 @@
-From 24ab36374f2e366b6c939fffe8c129c8b0ae3b9c Mon Sep 17 00:00:00 2001
-From: Philip McGrath <philip@philipmcgrath.com>
-Date: Wed, 28 Feb 2024 19:41:22 -0500
-Subject: [PATCH 1/2] Repairs and improvements for building with external
- dependencies (#807)
-
-* configure: fix zlib and lz4 submodule checks
-
-Conditionals to skip the submodule checks were using the wrong
-variable names, so the checks were always skipped. The correct
-behavior is to perform the check unless given `ZLIB=<zlib>` or
-`LZ4=<lz4>`, as applicable.
-
-* configure: support `ZUO=<zuo>`
-
-Supplying `ZUO=<zuo>` skips the submodule check in `configure`
-and configures the generated makefile not to build or remove Zuo.
-
-* configure: support `STEXLIB=<stex>`
-
-For compatibility with older scripts, when not explicitly configured,
-continue to honor the `STEXLIB` environment variable at build time.
-
-(cherry picked from commit b8838c3280ef10e115236d2f7ac9ae857f83e268)
----
- BUILDING              |  5 +++--
- build.zuo             | 13 +++++++++----
- configure             | 40 +++++++++++++++++++++++++++++++++-------
- makefiles/Makefile.in |  6 ++----
- 4 files changed, 47 insertions(+), 17 deletions(-)
-
-diff --git a/BUILDING b/BUILDING
-index 7b3dc9c8..9e9a268b 100644
---- a/BUILDING
-+++ b/BUILDING
-@@ -149,7 +149,8 @@ information on the supported options.
- The generated makefile mostly just ensures that a `zuo` executable is
- built in a `bin` directory, and then it defers the actual build work
- to `zuo`, which uses the "main.zuo" file. If you have `zuo` installed,
--you can use `zuo` directly instead of `make`. In general, instead of
-+you can use `zuo` directly instead of `make`: in that case, you may
-+wish to use `./configure ZUO=<zuo>`. In general, instead of
- the command `make X` to build target `X` as described below, you can
- use `zuo . X` (or `bin/zuo . X` after `bin/zuo` is built).
- 
-@@ -333,7 +334,7 @@ The makefile supports several targets:
-  * `make clean`
- 
-    Removes all built elements from the workarea, and then removes
--   `bin/zuo`.
-+   `bin/zuo` (unless configured with `ZUO=<zuo>`).
- 
- 
- WINDOWS VIA COMMAND PROMPT
-diff --git a/build.zuo b/build.zuo
-index c21d2caa..c5896396 100644
---- a/build.zuo
-+++ b/build.zuo
-@@ -224,10 +224,15 @@
-            token))
- 
-   (define stexlib
--    (let ((found (assoc "STEXLIB" (hash-ref (runtime-env) 'env))))
--      (if found
--          (cdr found)
--          (at-source "stex"))))
-+    (let ([configured (hash-ref config 'STEXLIB "")]
-+          [env (assoc "STEXLIB" (hash-ref (runtime-env) 'env))])
-+      (cond
-+        [(not (equal? "" configured))
-+         configured]
-+        [env
-+         (cdr env)]
-+        [else
-+         (at-source "stex")])))
-   (define stex-sources
-     (source-tree stexlib))
- 
-diff --git a/configure b/configure
-index 2b4b594e..782dd09b 100755
---- a/configure
-+++ b/configure
-@@ -93,6 +93,7 @@ default_warning_flags="-Wpointer-arith -Wall -Wextra -Wno-implicit-fallthrough"
- CFLAGS_ADD=
- zlibLib=
- LZ4Lib=
-+STEXLIB=
- Kernel=KernelLib
- buildKernelOnly=no
- enableFrompb=yes
-@@ -103,6 +104,7 @@ moreBootFiles=
- preloadBootFiles=
- alwaysUseBootFile=
- skipSubmoduleUpdate=
-+zuoExternal=
- 
- CONFIG_UNAME=`uname`
- 
-@@ -446,6 +448,12 @@ while [ $# != 0 ] ; do
-     LZ4=*)
-       LZ4Lib=`echo $1 | sed -e 's/^LZ4=//'`
-       ;;
-+    STEXLIB=*)
-+      STEXLIB=`echo $1 | sed -e 's/^STEXLIB=//'`
-+      ;;
-+    ZUO=*)
-+      zuoExternal=`echo $1 | sed -e 's/^ZUO=//'`
-+      ;;
-     *)
-       echo "option '$1' unrecognized or missing an argument; try $0 --help"
-       exit 1
-@@ -672,6 +680,8 @@ if [ "$help" = "yes" ]; then
-   echo "  STRIP=<strip>                     executable stripper"
-   echo "  ZLIB=<lib>                        link to <lib> instead of own zlib"
-   echo "  LZ4=<lib>                         link to <lib> instead of own LZ4"
-+  echo "  STEXLIB=<stex>                    build docs with <stex> instead of own stex"
-+  echo "  ZUO=<zuo>                         build with <zuo> instead of own Zuo"
-   echo ""
-   echo "Available machine types: $machs"
-   echo ""
-@@ -889,28 +899,39 @@ submod_instructions () {
-     exit 1
- }
- 
--if [ ! -f "$srcdir"/zuo/configure ] ; then
--    submod_instructions 'Source in "zuo" is missing'
-+if [ "${zuoExternal}" = "" ] ; then
-+    if [ ! -f "$srcdir"/zuo/configure ] ; then
-+        submod_instructions 'Source in "zuo" is missing'
-+    fi
-+    ZUO="bin/zuo"
-+    RM_ZUO="rm -f bin/zuo"
-+    ZUO_TARGET="bin/zuo"
-+else
-+    ZUO="${zuoExternal}"
-+    RM_ZUO="@echo 'Not cleaning external ${zuoExternal}'"
-+    ZUO_TARGET="DoNotBuildZuo"
- fi
- 
- if [ ! -f "$srcdir"/nanopass/nanopass.ss ] ; then
-     submod_instructions 'Source in "nanopass" is missing'
- fi
- 
--if [ "${zlibDep}" != "" ] ; then
-+if [ "${zlibLib}" = "" ] ; then
-     if [ ! -f "$srcdir"/zlib/configure ] ; then
-         submod_instructions 'Source in "zlib" is missing'
-     fi
- fi
- 
--if [ "${LZ4Dep}" != "" ] ; then
-+if [ "${LZ4Lib}" = "" ] ; then
-     if [ ! -f "$srcdir"/lz4/lib/Makefile ] ; then
-         submod_instructions 'Source in "lz4" is missing'
-     fi
- fi
- 
--if [ ! -f "$srcdir"/stex/Mf-stex ] ; then
--    submod_instructions 'Source in "stex" is missing'
-+if [ "${STEXLIB}" = "" ] ; then
-+    if [ ! -f "$srcdir"/stex/Mf-stex ] ; then
-+        submod_instructions 'Source in "stex" is missing'
-+    fi
- fi
- 
- # more compile and link flags for c/Mf-unix and mats/Mf-unix
-@@ -1083,7 +1104,7 @@ cp "$srcdir"/makefiles/buildmain.zuo main.zuo
- # Some idea, but in the workarea, so it refers to "workarea.zuo" here:
- cp "$srcdir"/makefiles/workmain.zuo $w/main.zuo
- 
--# The content of "$w/Makefile" records configuration decisions,
-+# The content of "$w/Mf-config" records configuration decisions,
- # and the Zuo build script takes it from there
- cat > $w/Mf-config << END
- srcdir=$srcdir
-@@ -1119,6 +1140,7 @@ cursesLib=$cursesLib
- ncursesLib=$ncursesLib
- zlibLib=$zlibLib
- LZ4Lib=$LZ4Lib
-+STEXLIB=$STEXLIB
- warningFlags=$warningFlags
- Kernel=$Kernel
- installscriptname=$installscriptname
-@@ -1130,6 +1152,10 @@ preloadBootFiles=$preloadBootFiles
- alwaysUseBootFile=$alwaysUseBootFile
- relativeBootFiles=$relativeBootFiles
- 
-+ZUO=$ZUO
-+RM_ZUO=$RM_ZUO
-+ZUO_TARGET=$ZUO_TARGET
-+
- InstallBin=$installbin
- InstallLib=$installlib
- InstallMan=$installman/man1
-diff --git a/makefiles/Makefile.in b/makefiles/Makefile.in
-index 3b95f065..0e3d307d 100644
---- a/makefiles/Makefile.in
-+++ b/makefiles/Makefile.in
-@@ -3,8 +3,6 @@ workarea=$(w)
- 
- include $(workarea)/Mf-config
- 
--ZUO=bin/zuo
--
- .PHONY: build
- build: $(ZUO)
- 	+ $(ZUO) $(workarea) MAKE="$(MAKE)"
-@@ -144,9 +142,9 @@ pkg: $(ZUO)
- .PHONY: clean
- clean: $(ZUO)
- 	+ $(ZUO) $(workarea) clean MAKE="$(MAKE)"
--	rm -f bin/zuo
-+	$(RM_ZUO)
- 
- # Using `+` here means that $(ZUO) gets built even if `-n`/`--dry-run` is provided to `make`
--$(ZUO): $(srcdir)/zuo/zuo.c
-+$(ZUO_TARGET): $(srcdir)/zuo/zuo.c
- 	+ mkdir -p bin
- 	+ $(CC_FOR_BUILD) -DZUO_LIB_PATH='"'"../zuo/lib"'"' -o $(ZUO) $(srcdir)/zuo/zuo.c
-
-base-commit: 253230f7dfbb4fe777277d6bbf93f39f9567f086
--- 
-2.41.0
-
-
-From 665bccc1c074131e790879adc1436f8059801171 Mon Sep 17 00:00:00 2001
-From: Matthew Flatt <mflatt@racket-lang.org>
-Date: Sun, 17 Mar 2024 09:06:30 -0600
-Subject: [PATCH 2/2] adjust `configure ZUO=<command>` support (#816)
-
-Continuing from b8838c3280, adjust the generated makefile so the
-supplied `<command>` is not a makefile dependency. That way, `ZUO=zuo`
-works if `zuo` is installed and the current build directory is not the
-source directory. (The `zuo` executable is a dependency in a real and
-relevant sense, but not in the sense of dependencies that we normally
-track in makefiles.)
-
-Also adapt the makefile for the case that `ZUO=...` is not supplied
-and the build directory is not the source directory, in which case
-`ZUO_LIB_PATH` needs to be relative to the source directory.
-
-Using `make ZUO=zuo` can also work, but in that case, `bin/zuo` is
-still built as a dependency. It's possible that some portable makefile
-magic could overcome that limitation, but it doesn't seem important.
-
-(cherry picked from commit d327968f37cdf669d15a9ad6d356bbf92c502bb9)
----
- configure             |  3 ++
- makefiles/Makefile.in | 66 +++++++++++++++++++++----------------------
- 2 files changed, 36 insertions(+), 33 deletions(-)
-
-diff --git a/configure b/configure
-index 782dd09b..9adae37a 100755
---- a/configure
-+++ b/configure
-@@ -904,10 +904,12 @@ if [ "${zuoExternal}" = "" ] ; then
-         submod_instructions 'Source in "zuo" is missing'
-     fi
-     ZUO="bin/zuo"
-+    ZUO_DEP="${ZUO}"
-     RM_ZUO="rm -f bin/zuo"
-     ZUO_TARGET="bin/zuo"
- else
-     ZUO="${zuoExternal}"
-+    ZUO_DEP=""
-     RM_ZUO="@echo 'Not cleaning external ${zuoExternal}'"
-     ZUO_TARGET="DoNotBuildZuo"
- fi
-@@ -1153,6 +1155,7 @@ alwaysUseBootFile=$alwaysUseBootFile
- relativeBootFiles=$relativeBootFiles
- 
- ZUO=$ZUO
-+ZUO_DEP=$ZUO_DEP
- RM_ZUO=$RM_ZUO
- ZUO_TARGET=$ZUO_TARGET
- 
-diff --git a/makefiles/Makefile.in b/makefiles/Makefile.in
-index 0e3d307d..fc8605a0 100644
---- a/makefiles/Makefile.in
-+++ b/makefiles/Makefile.in
-@@ -4,55 +4,55 @@ workarea=$(w)
- include $(workarea)/Mf-config
- 
- .PHONY: build
--build: $(ZUO)
-+build: $(ZUO_DEP)
- 	+ $(ZUO) $(workarea) MAKE="$(MAKE)"
- 
- .PHONY: run
--run: $(ZUO)
-+run: $(ZUO_DEP)
- 	+ $(ZUO) $(workarea) run
- 
- .PHONY: kernel
--kernel: $(ZUO)
-+kernel: $(ZUO_DEP)
- 	+ $(ZUO) $(workarea) kernel MAKE="$(MAKE)"
- 
- .PHONY: install
--install: $(ZUO)
-+install: $(ZUO_DEP)
- 	$(ZUO) $(workarea) install MAKE="$(MAKE)"
- 
- .PHONY: uninstall
--uninstall: $(ZUO)
-+uninstall: $(ZUO_DEP)
- 	+ $(ZUO) $(workarea) uninstall MAKE="$(MAKE)"
- 
- .PHONY: test-one
--test-one: $(ZUO)
-+test-one: $(ZUO_DEP)
- 	+ $(ZUO) $(workarea) test-one MAKE="$(MAKE)"
- 
- .PHONY: test-some-fast
--test-some-fast: $(ZUO)
-+test-some-fast: $(ZUO_DEP)
- 	+ $(ZUO) $(workarea) test-some-fast MAKE="$(MAKE)"
- 
- .PHONY: test-some
--test-some: $(ZUO)
-+test-some: $(ZUO_DEP)
- 	+ $(ZUO) $(workarea) test-some MAKE="$(MAKE)"
- 
- .PHONY: test
--test: $(ZUO)
-+test: $(ZUO_DEP)
- 	+ $(ZUO) $(workarea) test MAKE="$(MAKE)"
- 
- .PHONY: test-more
--test-more: $(ZUO)
-+test-more: $(ZUO_DEP)
- 	+ $(ZUO) $(workarea) test-more MAKE="$(MAKE)"
- 
- .PHONY: coverage
--coverage: $(ZUO)
-+coverage: $(ZUO_DEP)
- 	+ $(ZUO) $(workarea) coverage MAKE="$(MAKE)"
- 
- .PHONY: bootfiles
--bootfiles: $(ZUO)
-+bootfiles: $(ZUO_DEP)
- 	+ $(ZUO) $(workarea) bootfiles MAKE="$(MAKE)"
- 
- .PHONY: reset
--reset: $(ZUO)
-+reset: $(ZUO_DEP)
- 	+ $(ZUO) $(workarea) reset MAKE="$(MAKE)"
- 
- # Supply XM=<machine> to build boot files for <machine>
-@@ -61,90 +61,90 @@ boot:
- 	+ $(ZUO) $(workarea) boot "$(XM)" MAKE="$(MAKE)"
- 
- # `<machine>.boot` as alias for `boot XM=<machine>`
--%.boot: $(ZUO)
-+%.boot: $(ZUO_DEP)
- 	+ $(ZUO) $(workarea) boot $* MAKE="$(MAKE)"
- 
- .PHONY: auto.boot
--auto.boot: $(ZUO)
-+auto.boot: $(ZUO_DEP)
- 	+ $(ZUO) $(workarea) boot MAKE="$(MAKE)"
- 
- SCHEME=scheme
- 
- .PHONY: cross.boot
--cross.boot: $(ZUO)
-+cross.boot: $(ZUO_DEP)
- 	+ $(ZUO) $(workarea) boot SCHEME="$(SCHEME)" MAKE="$(MAKE)"
- 
- .PHONY: re.boot
--re.boot: $(ZUO)
-+re.boot: $(ZUO_DEP)
- 	+ $(ZUO) $(workarea) reboot SCHEME="$(SCHEME)"
- 
- # Supply XM=<machine> to build boot files for <machine>
- # with o=3 d=0 for the cross compiler, and only after
- # building the kernel for the configured machine
- .PHONY: bootquick
--bootquick: $(ZUO)
-+bootquick: $(ZUO_DEP)
- 	+ $(ZUO) $(workarea) bootquick "$(XM)" MAKE="$(MAKE)"
- 
- # `<machine>.bootquick` as alias for `boot XM=<machine>`
--%.bootquick: $(ZUO)
-+%.bootquick: $(ZUO_DEP)
- 	+ $(ZUO) $(workarea) bootquick $* MAKE="$(MAKE)"
- 
--auto.bootquick: $(ZUO)
-+auto.bootquick: $(ZUO_DEP)
- 	+ $(ZUO) $(workarea) bootquick MAKE="$(MAKE)"
- 
- # Supply XM=<machine>-<tag>.bootpbchunk to repackage boot files for
- # <machine> with pbchunk sources, including additional
- # boot files
- .PHONY: bootpbchunk
--bootpbchunk: $(ZUO)
-+bootpbchunk: $(ZUO_DEP)
- 	+ $(ZUO) $(workarea) bootpbchunk "$(XM)" $(ARGS) MAKE="$(MAKE)"
- 
- # `<machine>.bootpbchunk` as alias for `pbchunk XM=<machine>`
--%.bootpbchunk: $(ZUO)
-+%.bootpbchunk: $(ZUO_DEP)
- 	+ $(ZUO) $(workarea) bootpbchunk $* $(ARGS) MAKE="$(MAKE)"
- 
- .PHONY: docs
--docs: build $(ZUO)
-+docs: build $(ZUO_DEP)
- 	+ $(ZUO) $(workarea) docs MAKE="$(MAKE)"
- 
- .PHONY: csug
--csug: build $(ZUO)
-+csug: build $(ZUO_DEP)
- 	+ $(ZUO) $(workarea) csug MAKE="$(MAKE)"
- 
- .PHONY: release_notes
--release_notes: build $(ZUO)
-+release_notes: build $(ZUO_DEP)
- 	+ $(ZUO) $(workarea) release_notes MAKE="$(MAKE)"
- 
- .PHONY: install-docs
--install-docs: build $(ZUO)
-+install-docs: build $(ZUO_DEP)
- 	+ $(ZUO) $(workarea) install-docs MAKE="$(MAKE)"
- 
- .PHONY: install-csug
--install-csug: build $(ZUO)
-+install-csug: build $(ZUO_DEP)
- 	+ $(ZUO) $(workarea) install-csug MAKE="$(MAKE)"
- 
- .PHONY: install-release_notes
--install-release_notes: build $(ZUO)
-+install-release_notes: build $(ZUO_DEP)
- 	+ $(ZUO) $(workarea) install-release_notes MAKE="$(MAKE)"
- 
- .PHONY: bintar
--bintar: $(ZUO)
-+bintar: $(ZUO_DEP)
- 	+ $(ZUO) $(workarea) bintar MAKE="$(MAKE)"
- 
- .PHONY: rpm
--rpm: $(ZUO)
-+rpm: $(ZUO_DEP)
- 	+ $(ZUO) $(workarea) rpm MAKE="$(MAKE)"
- 
- .PHONY: pkg
--pkg: $(ZUO)
-+pkg: $(ZUO_DEP)
- 	+ $(ZUO) $(workarea) pkg MAKE="$(MAKE)"
- 
- .PHONY: clean
--clean: $(ZUO)
-+clean: $(ZUO_DEP)
- 	+ $(ZUO) $(workarea) clean MAKE="$(MAKE)"
- 	$(RM_ZUO)
- 
- # Using `+` here means that $(ZUO) gets built even if `-n`/`--dry-run` is provided to `make`
- $(ZUO_TARGET): $(srcdir)/zuo/zuo.c
- 	+ mkdir -p bin
--	+ $(CC_FOR_BUILD) -DZUO_LIB_PATH='"'"../zuo/lib"'"' -o $(ZUO) $(srcdir)/zuo/zuo.c
-+	+ $(CC_FOR_BUILD) -DZUO_LIB_PATH='"'"$(upsrcdir)/zuo/lib"'"' -o $(ZUO) $(srcdir)/zuo/zuo.c
--- 
-2.41.0
-
diff --git a/gnu/packages/patches/chez-scheme-backport-signal.patch b/gnu/packages/patches/chez-scheme-backport-signal.patch
deleted file mode 100644
index 1fee32b167..0000000000
--- a/gnu/packages/patches/chez-scheme-backport-signal.patch
+++ /dev/null
@@ -1,87 +0,0 @@
-From e416651d8b53fa2eca6edde764a9131d128cd166 Mon Sep 17 00:00:00 2001
-From: Matthew Flatt <mflatt@racket-lang.org>
-Date: Sat, 2 Mar 2024 07:18:41 -0700
-Subject: [PATCH] constrain signal delivery to Scheme to the main thread (#813)
-
-The intent is to avoid crashes when a signal gets delimited to a
-thread that might not even be a Scheme thread. Also, we don't try to
-queue the event directly in the main thread's context, because then
-we'd need more of a lock (while signal handling is otherwise an
-implicit lock).
-
-(cherry picked from commit fc081fc447a786dd53286e5d7314b7217631cb68)
----
-
-Notes:
-    This should fix intermittent test failures experienced by Guix:
-    see <https://github.com/cisco/ChezScheme/issues/809>.
-
- c/globals.h      |  1 +
- c/schsig.c       | 10 ++++++++++
- c/thread.c       |  1 +
- csug/system.stex |  2 ++
- 4 files changed, 14 insertions(+)
-
-diff --git a/c/globals.h b/c/globals.h
-index d2a08299..eb2965c5 100644
---- a/c/globals.h
-+++ b/c/globals.h
-@@ -49,6 +49,7 @@ EXTERN int S_num_preserve_ownership_threads;
- # ifdef IMPLICIT_ATOMIC_AS_EXPLICIT
- EXTERN s_thread_mutex_t S_implicit_mutex;
- # endif
-+EXTERN s_thread_t S_main_thread_id;
- #endif
- 
- /* segment.c */
-diff --git a/c/schsig.c b/c/schsig.c
-index a89ab62a..04677730 100644
---- a/c/schsig.c
-+++ b/c/schsig.c
-@@ -666,6 +666,16 @@ ptr S_dequeue_scheme_signals(ptr tc) {
- static void forward_signal_to_scheme(INT sig) {
-   ptr tc = get_thread_context();
- 
-+#ifdef PTHREADS
-+  /* deliver signals to the main thread, only; depending
-+     on the threads that are running, `tc` might even be NULL */
-+  if (tc != TO_PTR(&S_G.thread_context)) {
-+    pthread_kill(S_main_thread_id, sig);
-+    RESET_SIGNAL
-+    return;
-+  }
-+#endif
-+
-   if (enqueue_scheme_signal(tc, sig)) {
-     SIGNALINTERRUPTPENDING(tc) = Strue;
-     SOMETHINGPENDING(tc) = Strue;
-diff --git a/c/thread.c b/c/thread.c
-index 9a341b22..f130f44d 100644
---- a/c/thread.c
-+++ b/c/thread.c
-@@ -40,6 +40,7 @@ void S_thread_init(void) {
-     s_thread_cond_init(&S_terminated_cond);
-     S_alloc_mutex.owner = 0;
-     S_alloc_mutex.count = 0;
-+    S_main_thread_id = s_thread_self();
- 
- # ifdef IMPLICIT_ATOMIC_AS_EXPLICIT
-     s_thread_mutex_init(&S_implicit_mutex);
-diff --git a/csug/system.stex b/csug/system.stex
-index d4f2bcbb..bb89f419 100644
---- a/csug/system.stex
-+++ b/csug/system.stex
-@@ -547,6 +547,8 @@ After a signal handler for a given signal has been registered, receipt
- of the specified signal results in a call to the handler.
- The handler is passed the signal number, allowing the same handler to
- be used for different signals while differentiating among them.
-+In a threaded version of the system, signals are always delivered to
-+the main thread.
- 
- Signals handled in this fashion are treated like keyboard interrupts in
- that the handler is not called immediately when the signal is delivered
-
-base-commit: 253230f7dfbb4fe777277d6bbf93f39f9567f086
--- 
-2.41.0
-
