[newlib-cygwin] Cygwin: signal: Drop unnecessary queue flush

Takashi Yano tyan0@sourceware.org
Thu Nov 28 11:23:16 GMT 2024


https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=57ce5f1e0bf4a6fef7173b2549edc4f2090dd0e7

commit 57ce5f1e0bf4a6fef7173b2549edc4f2090dd0e7
Author: Takashi Yano <takashi.yano@nifty.ne.jp>
Date:   Mon Nov 25 20:55:44 2024 +0900

    Cygwin: signal: Drop unnecessary queue flush
    
    Previously, the retry flag was always set when pending_signal::pending()
    was called. However, if the queue is empty sig thread tries to flush
    the queue even though it is not necessary. With this patch, the retry
    flag is set only if the queue is not empty.
    
    Addresses: https://cygwin.com/pipermail/cygwin/2024-November/256744.html
    Fixes: 5e31c80e4e8d ("(pending_signals::pending): Force an additional loop through wait_sig by setting retry whenever this function is called.")
    Reported-by: Christian Franke <Christian.Franke@t-online.de>
    Reviewed-by: Corinna Vinschen <corinna@vinschen.de>
    Signed-off-by: Takashi Yano <takashi.yano@nifty.ne.jp>

Diff:
---
 winsup/cygwin/sigproc.cc | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/winsup/cygwin/sigproc.cc b/winsup/cygwin/sigproc.cc
index 8f46a80ab..4d50a5865 100644
--- a/winsup/cygwin/sigproc.cc
+++ b/winsup/cygwin/sigproc.cc
@@ -110,7 +110,7 @@ class pending_signals
 
 public:
   void add (sigpacket&);
-  bool pending () {retry = true; return !!start.next;}
+  bool pending () {retry = !!start.next; return retry;}
   void clear (int sig) {sigs[sig].si.si_signo = 0;}
   void clear (_cygtls *tls);
   friend void sig_dispatch_pending (bool);


More information about the Cygwin-cvs mailing list