[PATCH 3/5] ddraw: Check if the ddraw object still exists in d3d_device_inner_Release() (Valgrind).
Henri Verbeet
hverbeet at codeweavers.com
Wed Apr 29 10:27:35 CDT 2015
---
dlls/ddraw/ddraw.c | 3 +++
dlls/ddraw/device.c | 5 ++++-
2 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/dlls/ddraw/ddraw.c b/dlls/ddraw/ddraw.c
index ffffa9c..b3caba2 100644
--- a/dlls/ddraw/ddraw.c
+++ b/dlls/ddraw/ddraw.c
@@ -435,6 +435,9 @@ static void ddraw_destroy(struct ddraw *This)
wined3d_device_decref(This->wined3d_device);
wined3d_decref(This->wined3d);
+ if (This->d3ddevice)
+ This->d3ddevice->ddraw = NULL;
+
/* Now free the object */
HeapFree(GetProcessHeap(), 0, This);
}
diff --git a/dlls/ddraw/device.c b/dlls/ddraw/device.c
index f0f4ac3..bc19897 100644
--- a/dlls/ddraw/device.c
+++ b/dlls/ddraw/device.c
@@ -316,7 +316,10 @@ static ULONG WINAPI d3d_device_inner_Release(IUnknown *iface)
IUnknown_Release(rt_iface);
TRACE("Render target release done.\n");
- This->ddraw->d3ddevice = NULL;
+ /* Releasing the render target above may have released the last
+ * reference to the ddraw object. */
+ if (This->ddraw)
+ This->ddraw->d3ddevice = NULL;
/* Now free the structure */
HeapFree(GetProcessHeap(), 0, This);
--
1.7.10.4
More information about the wine-patches
mailing list