From d52984cc2e356797789deb221a637f5cf5890107 Mon Sep 17 00:00:00 2001
From: Zuo <[email protected]>
Date: Wed, 11 Feb 2026 14:16:38 +0800
Subject: [PATCH] sort: make sighandler async-signal-safe
* src/sort.c (main,sighandler): Make sighandler async-signal-safe
by removing non-async-signal-safe calls from signal handler.
Use SA_RESETHAND flag and call unlink() directly.
---
src/sort.c | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/src/sort.c b/src/sort.c
index eaf06d25c..4d7739a31 100644
--- a/src/sort.c
+++ b/src/sort.c
@@ -389,10 +389,11 @@ cleanup (void)
static void
sighandler (int sig)
{
- cleanup ();
-
- signal (sig, SIG_DFL);
+ //set flag=SA_RESETHAND, for async signal safe
+ for (struct tempnode const *node = temphead; node; node = node->next)
+ unlink (node->name);
raise (sig);
+ _exit (SORT_FAILURE);
}
/* Report MESSAGE for FILE, then clean up and exit.
@@ -4503,7 +4504,8 @@ main (int argc, char **argv)
act.sa_handler = sighandler;
act.sa_mask = caught_signals;
- act.sa_flags = 0;
+ //avoid signal() which is not async-signal-safe
+ act.sa_flags = SA_RESETHAND;
for (size_t i = 0; i < nsigs; i++)
{
--
2.25.1