Regression errors

Gerard Patel gerard.patel at nerim.net
Sat Nov 10 01:14:55 CST 2001


At 12:38 AM 10/11/2001 -0500, you wrote:

>1. SetTimer call is not always generating WM_TIMER messages as it should. I
>see:
>
>0806bb20:Call user32.SetTimer(00020057,00001003,00000000,6003a04c)
>ret=6001e9e4
>0806bb20:Ret  user32.SetTimer() retval=00001003 ret=6001e9e4
>
>in the trace, but never is the callback routine invoked. Without the above
>patch, the callback is invoked and does the painting.

I am not sure if it's related, but I have seen something like that. I have seen
it since much longer than this patch, though. 

It's about the paint count in the server. When there is a paint count > 0 in the
server and the number of windows found to need a repaint (at the client level)
is less than the paint count, the client can never get a timer event again.

Try this patch to dlls/user/message.c to see if your problem is related :

--- message.c.orig      Sat Nov 10 07:03:29 2001
+++ message.c   Sat Nov 10 07:08:27 2001
@@ -1861,6 +1861,7 @@
         USER_Driver.pMsgWaitForMultipleObjectsEx( 0, NULL, 0, 0, 0 );
 
     hwnd = WIN_GetFullHandle( hwnd );
+yetanothergoto:
     locks = WIN_SuspendWndsLock();
 
     if (!MSG_peek_message( &msg, hwnd, first, last,
@@ -1884,8 +1885,19 @@
     /* need to fill the window handle for WM_PAINT message */
     if (msg.message == WM_PAINT)
     {
-        if (!(msg.hwnd = WIN_FindWinToRepaint( hwnd ))) return FALSE;
-
+        if (!(msg.hwnd = WIN_FindWinToRepaint( hwnd )))
+        {
+             TRACE("FIXME : server paint count > 0 but no window needs
painting\n");
+             SERVER_START_REQ( inc_queue_paint_count )
+             {
+                req->id   = (void *)GetWindowThreadProcessId( hwnd, NULL );
+                if (!req->id) req->id = (void *)GetCurrentThreadId();
+                req->incr = -100000; /* reset paint count */
+                SERVER_CALL();
+             }
+             SERVER_END_REQ;
+             goto yetanothergoto;
+        }
         if (IsIconic( msg.hwnd ) && GetClassLongA( msg.hwnd, GCL_HICON ))
         {
             msg.message = WM_PAINTICON;

I have no idea about your second problem.

Gerard





More information about the wine-devel mailing list