Alexandre Julliard : winex11: Add window data structure locking to the ConfigureNotify event handler.

Alexandre Julliard julliard at winehq.org
Wed Sep 19 13:39:45 CDT 2012


Module: wine
Branch: master
Commit: 24c0abfd40a977ae82bc8af9330d28f192e4e295
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=24c0abfd40a977ae82bc8af9330d28f192e4e295

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Wed Sep 19 13:13:23 2012 +0200

winex11: Add window data structure locking to the ConfigureNotify event handler.

---

 dlls/winex11.drv/event.c |   19 ++++++++++++++-----
 1 files changed, 14 insertions(+), 5 deletions(-)

diff --git a/dlls/winex11.drv/event.c b/dlls/winex11.drv/event.c
index 5b50978..d58919c 100644
--- a/dlls/winex11.drv/event.c
+++ b/dlls/winex11.drv/event.c
@@ -993,17 +993,17 @@ void X11DRV_ConfigureNotify( HWND hwnd, XEvent *xev )
     int cx, cy, x = event->x, y = event->y;
 
     if (!hwnd) return;
-    if (!(data = X11DRV_get_win_data( hwnd ))) return;
-    if (!data->mapped || data->iconic) return;
-    if (data->whole_window && !data->managed) return;
+    if (!(data = get_win_data( hwnd ))) return;
+    if (!data->mapped || data->iconic) goto done;
+    if (data->whole_window && !data->managed) goto done;
     /* ignore synthetic events on foreign windows */
-    if (event->send_event && !data->whole_window) return;
+    if (event->send_event && !data->whole_window) goto done;
     if (data->configure_serial && (long)(data->configure_serial - event->serial) > 0)
     {
         TRACE( "win %p/%lx event %d,%d,%dx%d ignoring old serial %lu/%lu\n",
                hwnd, data->whole_window, event->x, event->y, event->width, event->height,
                event->serial, data->configure_serial );
-        return;
+        goto done;
     }
 
     /* Get geometry */
@@ -1059,6 +1059,7 @@ void X11DRV_ConfigureNotify( HWND hwnd, XEvent *xev )
         if (!IsZoomed( data->hwnd ))
         {
             TRACE( "win %p/%lx is maximized\n", data->hwnd, data->whole_window );
+            release_win_data( data );
             SendMessageW( data->hwnd, WM_SYSCOMMAND, SC_MAXIMIZE, 0 );
             return;
         }
@@ -1068,13 +1069,21 @@ void X11DRV_ConfigureNotify( HWND hwnd, XEvent *xev )
         if (IsZoomed( data->hwnd ))
         {
             TRACE( "window %p/%lx is no longer maximized\n", data->hwnd, data->whole_window );
+            release_win_data( data );
             SendMessageW( data->hwnd, WM_SYSCOMMAND, SC_RESTORE, 0 );
             return;
         }
     }
 
     if ((flags & (SWP_NOSIZE | SWP_NOMOVE)) != (SWP_NOSIZE | SWP_NOMOVE))
+    {
+        release_win_data( data );
         SetWindowPos( hwnd, 0, x, y, cx, cy, flags );
+        return;
+    }
+
+done:
+    release_win_data( data );
 }
 
 




More information about the wine-cvs mailing list