bug#80380: [patch]sort: make sighandler async-signal-safe
左洪盛 <[email protected]> Wed, 11 Feb 2026 15:06:21 +0800
| Newsgroups | gmane.comp.gnu.core-utils.bugs |
|---|---|
| Message-ID | <[email protected]> |
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