This is the mail archive of the cygwin@cygwin.com 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: cvs cygwin1.dll


On Fri, 13 Sep 2002 08:58:16 -0400, Christopher Faylor <cgf@redhat.com>
wrote:

>On Fri, Sep 13, 2002 at 09:09:37AM +0000, Guy Harrison wrote:
>>I can't seem to figure out how to set a breakpoint in sigproc.cc without
>>recompiling make with debug. Any hints?
>
>Just attach to the running process and set a breakpoint.
>
>Alternatively, use the "dll" command to load cygwin1.dll and then set
>a breakpoint on a *line number*.

Thanks, the latter helped verify that debugging made the problem go away
- ditto strace. Initially I thought it was a race. Racing certainly
helps trigger it but that isn't the problem.

I can't see a mechanism involving cygthread::stub to cater for the case
where "last man out"+1 ensures "last man out" is running. In all
situations where abnormal behaviour occurs we're left waiting upon a
process that consists of a single suspended cygthread::stub thread.
Others should be able to verify this by bumping up the size of the
cygthread.cc threads[] array up to a silly value then attempt an
intensive configure/make/install with it. Conversely now that I've set
threads[1] there's been no breakages.


Assuming the above gets fixed, coming back to racing, I saw that often
times the suspended thread never even got started by the time it found
itself in control. Might be worth trying cygthread::runner firing
non-suspended threads then let each stub initially stop itself. It's
tempting to suggest taking advantage of windows' dire scheduling with
something like this ...

cygthread::stub()
{
 cur = DropPriorityToMostIdle();
 while (!info->func)	//"volatile"
 ;
 RestorePriority(cur);

 ::CreateEvent();
 while (1) {
   if (!info->func)
     ::ExitThread(0)
   ;

   info->func();
   info->func = 0;
   ::SetEvent();

   cur = DropPriorityToMostIdle();
   while (!info->func)
     //::Sleep
   ;
   RestorePriority(cur);
 }
}


-- 
swamp-dog@ntlworld.com

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Bug reporting:         http://cygwin.com/bugs.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/


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