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

commit 0b6b450c64002dcdef09c10176ab181a17e09e52
Author: Takashi Yano <takashi.y...@nifty.ne.jp>
Date:   Sun Dec 8 08:28:46 2024 +0900

    Cygwin: _cygtls: Remove _cygtls::spinning
    
    There seems to be no rationale reason for _cygtls::spinning to exist,
    so it has been removed. _cygtls::spinning was introduced in the commit
    edc4f86ad282A, and this flag means that another thread is waiting to
    acquire _cygtls::stacklock. It is checked in the sig thread in _cygtls::
    interrupt_now(), and if spinning is true, the interrupt will be delayed.
    However, in this case, _cygtls::incyg is also set, so it is supposed to
    be covered by _cygtls::incyg flag and does not seem to add any value.
    
    If some problems happen in the signal handling, it might be a good idea
    to revert this commit and check if the issue will be fixed.
    
    Reviewed-by: Corinna Vinschen <cori...@vinschen.de>
    Signed-off-by: Takashi Yano <takashi.y...@nifty.ne.jp>

Diff:
---
 winsup/cygwin/cygtls.cc               | 2 +-
 winsup/cygwin/exceptions.cc           | 5 ++---
 winsup/cygwin/local_includes/cygtls.h | 1 -
 winsup/cygwin/scripts/gendef          | 3 ---
 4 files changed, 3 insertions(+), 8 deletions(-)

diff --git a/winsup/cygwin/cygtls.cc b/winsup/cygwin/cygtls.cc
index 2842c2733..bfaa19867 100644
--- a/winsup/cygwin/cygtls.cc
+++ b/winsup/cygwin/cygtls.cc
@@ -81,7 +81,7 @@ _cygtls::fixup_after_fork ()
       pop ();
       current_sig = 0;
     }
-  stacklock = spinning = 0;
+  stacklock = 0;
   signal_arrived = NULL;
   locals.select.sockevt = NULL;
   locals.cw_timer = NULL;
diff --git a/winsup/cygwin/exceptions.cc b/winsup/cygwin/exceptions.cc
index 35a4a0b47..4dc4be278 100644
--- a/winsup/cygwin/exceptions.cc
+++ b/winsup/cygwin/exceptions.cc
@@ -920,9 +920,8 @@ _cygtls::interrupt_now (CONTEXT *cx, siginfo_t& si, void 
*handler,
 
   /* Delay the interrupt if we are
      1) somehow inside the DLL
-     2) in _sigfe (spinning is true) and about to enter cygwin DLL
-     3) in a Windows DLL.  */
-  if (incyg || spinning || inside_kernel (cx))
+     2) in a Windows DLL.  */
+  if (incyg || inside_kernel (cx))
     interrupted = false;
   else
     {
diff --git a/winsup/cygwin/local_includes/cygtls.h 
b/winsup/cygwin/local_includes/cygtls.h
index b7efcdae2..2d490646a 100644
--- a/winsup/cygwin/local_includes/cygtls.h
+++ b/winsup/cygwin/local_includes/cygtls.h
@@ -196,7 +196,6 @@ public: /* Do NOT remove this public: line, it's a marker 
for gentls_offsets. */
   waitq wq;
   int current_sig;
   unsigned incyg;
-  volatile unsigned spinning;
   volatile unsigned stacklock;
   __tlsstack_t *stackptr;
   __tlsstack_t stack[TLS_STACK_SIZE];
diff --git a/winsup/cygwin/scripts/gendef b/winsup/cygwin/scripts/gendef
index 11cdf584a..521550175 100755
--- a/winsup/cygwin/scripts/gendef
+++ b/winsup/cygwin/scripts/gendef
@@ -134,7 +134,6 @@ _sigfe:                                             # stack 
is aligned on entry!
        movq    %gs:8,%r10                      # location of bottom of stack
 1:     movl    \$1,%r11d
        xchgl   %r11d,_cygtls.stacklock(%r10)   # try to acquire lock
-       movl    %r11d,_cygtls.spinning(%r10)    # flag if we are waiting for 
lock
        testl   %r11d,%r11d                     # it will be zero
        jz      2f                              #  if so
        pause
@@ -158,7 +157,6 @@ _sigbe:                                             # 
return here after cygwin syscall
        movq    %gs:8,%r10                      # address of bottom of tls
 1:     movl    \$1,%r11d
        xchgl   %r11d,_cygtls.stacklock(%r10)   # try to acquire lock
-       movl    %r11d,_cygtls.spinning(%r10)    # flag if we are waiting for 
lock
        testl   %r11d,%r11d                     # it will be zero
        jz      2f                              #  if so
        pause
@@ -258,7 +256,6 @@ sigdelayed:
 
 1:     movl    \$1,%r11d
        xchgl   %r11d,_cygtls.stacklock(%r12)   # try to acquire lock
-       movl    %r11d,_cygtls.spinning(%r12)    # flag if we are waiting for 
lock
        testl   %r11d,%r11d                     # it will be zero
        jz      2f                              #  if so
        pause

Reply via email to