[PATCH 2/5] dxgi: Free the wined3d object when device creation fails (Valgrind).
Henri Verbeet
hverbeet at gmail.com
Wed Aug 27 12:22:25 CDT 2014
On 27 August 2014 18:40, Matteo Bruni <mbruni at codeweavers.com> wrote:
> ---
> dlls/dxgi/device.c | 8 +++++++-
> 1 file changed, 7 insertions(+), 1 deletion(-)
>
> diff --git a/dlls/dxgi/device.c b/dlls/dxgi/device.c
> index 837c57f..0f3ae7d 100644
> --- a/dlls/dxgi/device.c
> +++ b/dlls/dxgi/device.c
> @@ -350,7 +350,7 @@ HRESULT dxgi_device_init(struct dxgi_device *device, struct dxgi_device_layer *l
> IWineDXGIDeviceParent *dxgi_device_parent;
> IWineDXGIAdapter *wine_adapter;
> UINT adapter_ordinal;
> - struct wined3d *wined3d;
> + struct wined3d *wined3d = NULL;
> void *layer_base;
> HRESULT hr;
> WINED3DCAPS caps;
> @@ -430,6 +430,12 @@ fail:
> wined3d_device_decref(device->wined3d_device);
> LeaveCriticalSection(&dxgi_cs);
> }
> + else if (wined3d)
> + {
> + EnterCriticalSection(&dxgi_cs);
> + wined3d_decref(wined3d);
> + LeaveCriticalSection(&dxgi_cs);
> + }
I don't think this works as intended. For example, if
IDXGIAdapter_QueryInterface() fails, you'd call wined3d_decref()
twice. There's also a wined3d_decref() after wined3d_device_create(),
although it's indeed missing for IWineDXGIDevice_QueryInterface() and
wined3d_get_device_caps().
More information about the wine-devel
mailing list