[PATCH 2/5] dxgi: Free the wined3d object when device creation fails (Valgrind).
Matteo Bruni
matteo.mystral at gmail.com
Wed Aug 27 12:42:01 CDT 2014
2014-08-27 19:22 GMT+02:00 Henri Verbeet <hverbeet at gmail.com>:
> 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.
Uh, indeed. I'll fix that up.
> There's also a wined3d_decref() after wined3d_device_create(),
That too.
> although it's indeed missing for IWineDXGIDevice_QueryInterface() and
> wined3d_get_device_caps().
More information about the wine-devel
mailing list