Cygwin 3.4.3 and 3.5.0... hangs in make, top, procps, ls /proc/PID/...

Corinna Vinschen corinna-cygwin@cygwin.com
Mon Jan 9 16:02:56 GMT 2023


On Jan  3 08:03, Takashi Yano via Cygwin wrote:
> On Mon, 2 Jan 2023 11:32:01 +0900
> Takashi Yano wrote:
> > On Thu, 29 Dec 2022 21:59:45 -0700
> > Brian Inglis wrote:
> > > I got some hangs (deadlock?) between (parallel?) make jobs, top, procps, and 
> > > even ls /proc/*/ when trying to cygport all check curl or look at the process 
> > > statuses when builds hung under Cygwin 3.4.3 and 3.5.0-0.69...
> > > [...]
> Do we need to guard here as well?
> 
> 	case __SIGPENDING:
> 	  {
> 	    unsigned bit;
> 
> 	    *pack.mask = 0;
> 	    tl_entry = cygheap->find_tls (pack.sigtls);
> 	    while ((q = q->next))
> 	      {
> 		/* Skip thread-specific signals for other threads. */
> 		if (q->sigtls && pack.sigtls != q->sigtls)
> 		  continue;
> ------->	if (pack.sigtls->sigmask & (bit = SIGTOMASK (q->si.si_signo)))
> 		  *pack.mask |= bit;
> 	      }
> 	    cygheap->unlock_tls (tl_entry);
> 	  }
> 	  break;

I'm not entirely clear what the right action is in terms of this sigtls
problem, but no, we don't need a guard in the __SIGPENDING branch.
__SIGPENDING is always called with a valid sigtls member in pack,
because __SIGPENDING is only called for a specific thread, either from
sigpending(2) or from fhandler_signalfd::poll(), which is called via
select(2).


Corinna


More information about the Cygwin mailing list