question about multiwindow mode and application icons

Harold L Hunt II huntharo@msu.edu
Sat May 17 17:17:00 GMT 2003


Earle,

> Good point, I don't know what I was thinking about WM_USER, you're 100% 
> correct
> that it shouldn't be done in a WM_COMMAND, it's a valid message on its 
> own.  I've
> been programming Windoze since Win 3.1, I should've known better!
> 

Heh heh... no problem.

> That's quite odd!  The XMsg thread explicitly sets the error handler to the
> WM error handler, and there's no legal way for it to get into that function
> since it's not referenced anywhere in the code.  I can't reproduce what 
> you're
> seeing, at least not on a single machine.  If its repeatable on your 
> end, can
> you try commenting out the pthread_create for the XMsg proc and seeing 
> if it
> occurs again?  Running xfig locally eats up 100% CPU when doing anything 
> for
> me, maybe there's a race condition somewhere that only shows up when the
> scheduler is overtaxed?  FWIW I had seen the clipboard thread die under
> the version of the server the cygwin setup installs, after running some EDA
> tools but it's not something I took note of or kept logs.  And that rev is
> so far behind the one you're at that it probably doesn't mean anything.
> 
> Looking over the XMsg function code the only thing I can think of is that
> it needs to wait on the pProcArg->ppmServerStarted mutex, which it's not 
> doing
> presently since the comments make me think that only thread needs to do 
> this
> to kickstart the main server, and it's already being done in the clipboard
> and the WM thread.  Also, since the thread opens the server before it
> sets the error handlers I imagine the server process is up and running
> when the error handlers are installed.
> 

I think found the race condition and fixed it.

 From the manual, it sounds like XInitThreads is only supposed to be 
called once per process... either that, or, it is simply not thread 
safe.  I added the ppmServerStarted mutex code to winMultiWindowXMsgProc 
() and moved the unlocking of the mutex in all thread functions to occur 
after the call to XInitThreads.

Now, those blocks of three ERROR messages that I was getting from 
winClipboardErrorHandler () are now in the same place, but they are 
coming from winMultiWindowWMErrorHandler (), as they should.

So, it looks like we were having a problem with Xlib delivering events 
to the wrong thread.  Playing it safe with XInitThreads seems to have 
taken care of this problem.  I can now run with -multiwindow and 
-clipboard safely.

Harold



More information about the Cygwin-xfree mailing list