This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Signal occasionally causes thread inside win32 api to be suspended?


On 09/12/2013 20:47, Christopher Faylor wrote:
> On Sun, Dec 08, 2013 at 05:36:16PM +0000, Jon TURNEY wrote:
>> I don't really understand the intricacies of cygwin signal delivery,
>> but I see that it can suspend the target thread to determine if it's in
>> a safe place to deliver the signal (outside a win32 API call).  I think
>> that sometimes the thread is not correctly resumed.
>>
>> This appears to be the cause of been a long-standing problem with the
>> X.org X server on cygwin, which we work around by disabling
>> smart-scheduling (no great loss), but I've only just recently
>> understood enough about the problem to produce a STC.
>>
>> If you run the attached for a while, it stops.  According to Process
>> Hacker, the main thread is in the suspended state, inside ntdll.dll.
>> e.g.:
> 
> I think I have worked around the problem: calling GetModuleName for the
> address associated with ntdll.dll while the thread is suspended can cause
> the program (thread?) to hang.

Ah, makes sense.  It's probably deadlocked on the global loader lock, if you
happen to suspend the thread while it is held.

> This should be rectified in today's snapshot.

-- 
Jon TURNEY
Volunteer Cygwin/X X Server maintainer

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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]