diff --git a/dlls/ddraw/ddraw.c b/dlls/ddraw/ddraw.c index ffffa9c192..b3caba2989 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 f0f4ac3b98..bc19897b3c 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);