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

Reply via email to