Alexandre Julliard : winex11: The XIM callback is called with the X11 lock held.

Alexandre Julliard julliard at winehq.org
Mon May 5 14:28:22 CDT 2008


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

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Mon May  5 15:08:33 2008 +0200

winex11: The XIM callback is called with the X11 lock held.

---

 dlls/winex11.drv/xim.c |   12 ++++++------
 1 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/dlls/winex11.drv/xim.c b/dlls/winex11.drv/xim.c
index a4fbdb2..8512583 100644
--- a/dlls/winex11.drv/xim.c
+++ b/dlls/winex11.drv/xim.c
@@ -374,8 +374,10 @@ static void X11DRV_DestroyIM(XIM xim, XPointer p, XPointer data)
 }
 
 /***********************************************************************
-*           X11DRV Ime creation
-*/
+ *           X11DRV Ime creation
+ *
+ * Should always be called with the x11 lock held
+ */
 static void X11DRV_OpenIM(Display *display, XPointer ptr, XPointer data)
 {
     struct x11drv_thread_data *thread_data = x11drv_thread_data();
@@ -385,13 +387,10 @@ static void X11DRV_OpenIM(Display *display, XPointer ptr, XPointer data)
     XIM xim;
     XIMCallback destroy;
 
-    wine_tsx11_lock();
-
     xim = XOpenIM(display, NULL, NULL, NULL);
     if (xim == NULL)
     {
         WARN("Could not open input method.\n");
-        wine_tsx11_unlock();
         return;
     }
 
@@ -411,7 +410,6 @@ static void X11DRV_OpenIM(Display *display, XPointer ptr, XPointer data)
     {
         WARN("Could not find supported input style.\n");
         XCloseIM(xim);
-        wine_tsx11_unlock();
         return;
     }
     else
@@ -474,8 +472,10 @@ static void X11DRV_OpenIM(Display *display, XPointer ptr, XPointer data)
 
     thread_data->xim = xim;
     XUnregisterIMInstantiateCallback(display, NULL, NULL, NULL, X11DRV_OpenIM, NULL);
+
     wine_tsx11_unlock();
     IME_UpdateAssociation(NULL);
+    wine_tsx11_lock();
 }
 
 




More information about the wine-cvs mailing list