Matteo Bruni : winex11.drv: Don' t modify state if glXMakeContextCurrent fails.

Alexandre Julliard julliard at winehq.org
Thu Mar 31 12:43:43 CDT 2011


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

Author: Matteo Bruni <mbruni at codeweavers.com>
Date:   Fri Mar 11 21:47:32 2011 +0100

winex11.drv: Don't modify state if glXMakeContextCurrent fails.

---

 dlls/winex11.drv/opengl.c |   27 ++++++++++++++++-----------
 1 files changed, 16 insertions(+), 11 deletions(-)

diff --git a/dlls/winex11.drv/opengl.c b/dlls/winex11.drv/opengl.c
index 0a23e44..1d2eacf 100644
--- a/dlls/winex11.drv/opengl.c
+++ b/dlls/winex11.drv/opengl.c
@@ -1977,22 +1977,27 @@ BOOL CDECL X11DRV_wglMakeContextCurrentARB(X11DRV_PDEVICE* pDrawDev, X11DRV_PDEV
         if (NULL == pglXMakeContextCurrent) {
             ret = FALSE;
         } else {
-            Wine_GLContext *prev_ctx = NtCurrentTeb()->glContext;
             Wine_GLContext *ctx = (Wine_GLContext *) hglrc;
             Drawable d_draw = get_glxdrawable(pDrawDev);
             Drawable d_read = get_glxdrawable(pReadDev);
 
-            if (prev_ctx) prev_ctx->tid = 0;
-
-            ctx->has_been_current = TRUE;
-            ctx->tid = GetCurrentThreadId();
-            ctx->hdc = pDrawDev->hdc;
-            ctx->read_hdc = pReadDev->hdc;
-            ctx->drawables[0] = d_draw;
-            ctx->drawables[1] = d_read;
-            ctx->refresh_drawables = FALSE;
             ret = pglXMakeContextCurrent(gdi_display, d_draw, d_read, ctx->ctx);
-            NtCurrentTeb()->glContext = ctx;
+            if (ret)
+            {
+                Wine_GLContext *prev_ctx = NtCurrentTeb()->glContext;
+                if (prev_ctx) prev_ctx->tid = 0;
+
+                ctx->has_been_current = TRUE;
+                ctx->tid = GetCurrentThreadId();
+                ctx->hdc = pDrawDev->hdc;
+                ctx->read_hdc = pReadDev->hdc;
+                ctx->drawables[0] = d_draw;
+                ctx->drawables[1] = d_read;
+                ctx->refresh_drawables = FALSE;
+                NtCurrentTeb()->glContext = ctx;
+            }
+            else
+                SetLastError(ERROR_INVALID_HANDLE);
         }
     }
     wine_tsx11_unlock();




More information about the wine-cvs mailing list