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