[PATCH] check for NULL wineD3DDevice

Marcus Meissner marcus at jet.franken.de
Sat May 12 09:25:53 CDT 2007


Hi,

We also need to check for wineD3DDevice in Release
to avoid crashes if no D3D.

Ciao, Marcus
---
 dlls/ddraw/surface.c |   37 +++++++++++++++++++------------------
 1 files changed, 19 insertions(+), 18 deletions(-)

diff --git a/dlls/ddraw/surface.c b/dlls/ddraw/surface.c
index 62edb21..9e7cac2 100644
--- a/dlls/ddraw/surface.c
+++ b/dlls/ddraw/surface.c
@@ -307,27 +307,28 @@ IDirectDrawSurfaceImpl_Release(IDirectDr
         else if( (ddraw->d3d_initialized) && (This == ddraw->d3d_target))
         {
             TRACE("(%p) Destroying the render target, uninitializing D3D\n", This);
+	    if (ddraw->wineD3DDevice) {
+                /* Unset any index buffer, just to be sure */
+                IWineD3DDevice_SetIndices(ddraw->wineD3DDevice, NULL, 0);
+                IWineD3DDevice_SetDepthStencilSurface(ddraw->wineD3DDevice, NULL);
 
-            /* Unset any index buffer, just to be sure */
-            IWineD3DDevice_SetIndices(ddraw->wineD3DDevice, NULL, 0);
-            IWineD3DDevice_SetDepthStencilSurface(ddraw->wineD3DDevice, NULL);
-
-            if(IWineD3DDevice_Uninit3D(ddraw->wineD3DDevice, D3D7CB_DestroyDepthStencilSurface, D3D7CB_DestroySwapChain) != D3D_OK)
-            {
-                /* Not good */
-                ERR("(%p) Failed to uninit 3D\n", This);
-            }
-            else
-            {
-                /* Free the d3d window if one was created */
-                if(ddraw->d3d_window != 0)
+                if(IWineD3DDevice_Uninit3D(ddraw->wineD3DDevice, D3D7CB_DestroyDepthStencilSurface, D3D7CB_DestroySwapChain) != D3D_OK)
                 {
-                    TRACE(" (%p) Destroying the hidden render window %p\n", This, ddraw->d3d_window);
-                    DestroyWindow(ddraw->d3d_window);
-                    ddraw->d3d_window = 0;
+                    /* Not good */
+                    ERR("(%p) Failed to uninit 3D\n", This);
                 }
-                /* Unset the pointers */
-            }
+                else
+                {
+                    /* Free the d3d window if one was created */
+                    if(ddraw->d3d_window != 0)
+                    {
+                        TRACE(" (%p) Destroying the hidden render window %p\n", This, ddraw->d3d_window);
+                        DestroyWindow(ddraw->d3d_window);
+                        ddraw->d3d_window = 0;
+                    }
+                    /* Unset the pointers */
+                }
+	    }
 
             ddraw->d3d_initialized = FALSE;
             ddraw->d3d_target = NULL;
-- 
1.4.3.4



More information about the wine-patches mailing list