delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2005/10/11/10:50:07

Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm
List-Subscribe: <mailto:cygwin-subscribe AT cygwin DOT com>
List-Archive: <http://sourceware.org/ml/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-help AT cygwin DOT com>, <http://sourceware.org/ml/#faqs>
Sender: cygwin-owner AT cygwin DOT com
Mail-Followup-To: cygwin AT cygwin DOT com
Delivered-To: mailing list cygwin AT cygwin DOT com
X-Authenticated: #14308112
Date: Tue, 11 Oct 2005 17:51:00 +0300
From: Pavel Tsekov <ptsekov AT gmx DOT net>
To: cygwin AT cygwin DOT com
Subject: Re: handle_threadlist_exception: handle_threadlist_exception called with threadlist_ix -1
In-Reply-To: <Pine.CYG.4.58.0510061840550.1524@mordor>
Message-ID: <Pine.CYG.4.58.0510111733550.1460@mordor>
References: <SERRANOzGZuNY1SWoBD0000004f AT SERRANO DOT CAM DOT ARTIMI DOT COM> <20050901144331 DOT GH18595 AT trixie DOT casa DOT cgf DOT cx> <Pine DOT CYG DOT 4 DOT 58 DOT 0510061616570 DOT 1556 AT mordor> <20051006141933 DOT GB17445 AT trixie DOT casa DOT cgf DOT cx> <Pine DOT CYG DOT 4 DOT 58 DOT 0510061735120 DOT 1140 AT mordor> <20051006150019 DOT GA6197 AT trixie DOT casa DOT cgf DOT cx> <Pine DOT CYG DOT 4 DOT 58 DOT 0510061840550 DOT 1524 AT mordor>
MIME-Version: 1.0
X-Y-GMX-Trusted: 0
X-IsSubscribed: yes

---559023410-580310325-1129042260=:1476
Content-Type: TEXT/PLAIN; charset=US-ASCII

On Thu, 6 Oct 2005, Pavel Tsekov wrote:

> On Thu, 6 Oct 2005, Christopher Faylor wrote:
>
> > >It might be a different problem but the message is the same.
> >
> > It *is* a different problem.
>
> Ok.
>
> > Some thread is sending a signal 31 (SIGUSR1).  Which thread is doing this?
>
> An application thread signaling another thread to stop its execution. I am
> on it - I'll report back if I manage to find something.

While tracking this problem I found what I suspect is a small bug in
the way sigsuspend() works when it is used to retrieve the list of pending
signals for a thread other than the main one. I think this is related to
the crash I am seeing in some way though this has to be determined yet.

As I read the code, when retrieving the list of pending signals
sigpending() inspects only the list of blocked signals for the main
thread - it doesn't look in the thread specific list of blocked signals
of the calling thread.

The code which I refer to is the following block from wait_sig():

        case __SIGPENDING:
          *pack.mask = 0;
          unsigned bit;
          sigq.reset ();
          while ((q = sigq.next ()))
            if (myself->getsigmask () & (bit = SIGTOMASK (q->si.si_signo)))
              *pack.mask |= bit;
          break;

On the other hand the code in sigpacket::process() does the right thing
when it delivers a signal i.e. it looks the list of blocked signals in
both the main thread and the target thread.

Attached is a simple test case which demonstrates the problem.

On Linux:

pending_set = 00000000
pending_set = 00000000
pending_set = 00000000
pending_set = 00000000
pending_set = 00000000
pending_set = 00000800
exiting thread_loop()

On Cygwin:

pending_set = 00000000
pending_set = 00000000
pending_set = 00000000
pending_set = 00000000
pending_set = 00000000
pending_set = 00000000
pending_set = 00000000
pending_set = 00000000
pending_set = 00000000
pending_set = 00000000
pending_set = 00000000
pending_set = 00000000
pending_set = 00000000

[ keeps looping forever ]
---559023410-580310325-1129042260=:1476
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="sigpending_thr.c"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine DOT CYG DOT 4 DOT 58 DOT 0510111751001 DOT 1476 AT mordor>
Content-Description: 
Content-Disposition: attachment; filename="sigpending_thr.c"

I2luY2x1ZGUgPHNpZ25hbC5oPg0KI2luY2x1ZGUgPHN0ZGlvLmg+DQojaW5j
bHVkZSA8cHRocmVhZC5oPg0KDQpzdGF0aWMgdm9pZCAqdGhyZWFkX2xvb3Ag
KHZvaWQgKnVudXNlZCkNCnsNCiAgc2lnc2V0X3QgYmxvY2tfc2V0LCBwZW5k
aW5nX3NldDsNCg0KICBzaWdlbXB0eXNldCAoJmJsb2NrX3NldCk7DQogIHNp
Z2FkZHNldCAoJmJsb2NrX3NldCwgU0lHVVNSMik7DQogIGlmIChwdGhyZWFk
X3NpZ21hc2sgKFNJR19CTE9DSywgJmJsb2NrX3NldCwgTlVMTCkgIT0gMCkN
CiAgICB7DQogICAgICBwcmludGYgKCJmYWlsZWQgdG8gc2V0IHRoZSBsaXN0
IG9mIGJsb2NrZWQgc2lnbmFsc1xuIik7DQogICAgfQ0KDQogIHdoaWxlICgx
KQ0KICAgIHsNCiAgICAgIHNpZ3BlbmRpbmcgKCZwZW5kaW5nX3NldCk7DQoN
CiAgICAgIHByaW50ZiAoInBlbmRpbmdfc2V0ID0gJTA4WFxuIiwgcGVuZGlu
Z19zZXQpOw0KDQogICAgICBpZiAoc2lnaXNtZW1iZXIgKCZwZW5kaW5nX3Nl
dCwgU0lHVVNSMikgIT0gMCkNCglicmVhazsNCg0KICAgICAgc2xlZXAgKDEp
Ow0KICAgIH0NCg0KICBwcmludGYgKCJleGl0aW5nIHRocmVhZF9sb29wKClc
biIpOw0KDQogIHJldHVybiBOVUxMOw0KfQ0KDQppbnQgbWFpbiAoaW50IGFy
Z2MsIGNoYXIgKiphcmd2KQ0Kew0KICBpbnQgcnY7DQogIHB0aHJlYWRfdCB0
aHJfaWQ7DQoNCiAgcnYgPSBwdGhyZWFkX2NyZWF0ZSAoJnRocl9pZCwgTlVM
TCwgdGhyZWFkX2xvb3AsIE5VTEwpOw0KICBpZiAocnYgIT0gMCkNCiAgICB7
DQogICAgICBwcmludGYgKCJmYWlsZWQgdG8gY3JlYXRlIHRocmVhZC5cbiIp
Ow0KICAgICAgZXhpdCAoMSk7DQogICAgfQ0KDQogIC8qIGdpdmUgdGhlIHNl
Y29uZCB0aHJlYWQgYSBjaGFuY2UgdG8gcnVuICovDQogIHNsZWVwICg1KTsN
Cg0KICB3aGlsZSAoMSkNCiAgICB7DQogICAgICBpZiAocHRocmVhZF9raWxs
ICh0aHJfaWQsIFNJR1VTUjIpICE9IDApDQogICAgICAgIGJyZWFrOw0KICAg
IH0NCg0KICBleGl0ICgwKTsNCn0NCg==


---559023410-580310325-1129042260=:1476
Content-Type: text/plain; charset=us-ascii

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/
---559023410-580310325-1129042260=:1476--

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019