From df78252ad7729feb80f927669b9c52c9d284ca50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ri=C4=8Dardas=20Barkauskas?= Date: Tue, 21 Jun 2011 00:30:12 +0300 Subject: ddraw: AddRef the surface in AddAttachedSurface instead of helper function. --- dlls/ddraw/surface.c | 49 +++++++++++++++++++++++++++++++++++++++++++------ 1 files changed, 43 insertions(+), 6 deletions(-) diff --git a/dlls/ddraw/surface.c b/dlls/ddraw/surface.c index ca9f333..36c4084 100644 --- a/dlls/ddraw/surface.c +++ b/dlls/ddraw/surface.c @@ -1306,7 +1306,6 @@ static HRESULT ddraw_surface_attach_surface(IDirectDrawSurfaceImpl *This, IDirec IDirect3DDeviceImpl_UpdateDepthStencil(This->ddraw->d3ddevice); } - ddraw_surface7_AddRef(&Surf->IDirectDrawSurface7_iface); LeaveCriticalSection(&ddraw_cs); return DD_OK; } @@ -1315,6 +1314,7 @@ static HRESULT WINAPI ddraw_surface7_AddAttachedSurface(IDirectDrawSurface7 *ifa { IDirectDrawSurfaceImpl *This = impl_from_IDirectDrawSurface7(iface); IDirectDrawSurfaceImpl *Surf = unsafe_impl_from_IDirectDrawSurface7(Attach); + HRESULT hr; TRACE("iface %p, attachment %p.\n", iface, Attach); @@ -1327,23 +1327,38 @@ static HRESULT WINAPI ddraw_surface7_AddAttachedSurface(IDirectDrawSurface7 *ifa return DDERR_CANNOTATTACHSURFACE; } - return ddraw_surface_attach_surface(This, Surf); + hr = ddraw_surface_attach_surface(This, Surf); + if (FAILED(hr)) + { + return hr; + } + ddraw_surface7_AddRef(Attach); + return hr; } static HRESULT WINAPI ddraw_surface4_AddAttachedSurface(IDirectDrawSurface4 *iface, IDirectDrawSurface4 *attachment) { IDirectDrawSurfaceImpl *This = impl_from_IDirectDrawSurface4(iface); IDirectDrawSurfaceImpl *attachment_impl = unsafe_impl_from_IDirectDrawSurface4(attachment); + HRESULT hr; TRACE("iface %p, attachment %p.\n", iface, attachment); - return ddraw_surface7_AddAttachedSurface(&This->IDirectDrawSurface7_iface, + hr = ddraw_surface7_AddAttachedSurface(&This->IDirectDrawSurface7_iface, attachment_impl ? &attachment_impl->IDirectDrawSurface7_iface : NULL); + if (FAILED(hr)) + { + return hr; + } + ddraw_surface4_AddRef(attachment); + ddraw_surface7_Release(&attachment_impl->IDirectDrawSurface7_iface); + return hr; } static HRESULT WINAPI ddraw_surface3_AddAttachedSurface(IDirectDrawSurface3 *iface, IDirectDrawSurface3 *attachment) { IDirectDrawSurfaceImpl *This = impl_from_IDirectDrawSurface3(iface); IDirectDrawSurfaceImpl *attach_impl = unsafe_impl_from_IDirectDrawSurface3(attachment); + HRESULT hr; TRACE("iface %p, attachment %p.\n", iface, attachment); @@ -1375,29 +1390,51 @@ static HRESULT WINAPI ddraw_surface3_AddAttachedSurface(IDirectDrawSurface3 *ifa return DDERR_CANNOTATTACHSURFACE; } - return ddraw_surface_attach_surface(This, attach_impl); + hr = ddraw_surface_attach_surface(This, attach_impl); + if (FAILED(hr)) + { + return hr; + } + ddraw_surface3_AddRef(attachment); + return hr; } static HRESULT WINAPI ddraw_surface2_AddAttachedSurface(IDirectDrawSurface2 *iface, IDirectDrawSurface2 *attachment) { IDirectDrawSurfaceImpl *This = impl_from_IDirectDrawSurface2(iface); IDirectDrawSurfaceImpl *attachment_impl = unsafe_impl_from_IDirectDrawSurface2(attachment); + HRESULT hr; TRACE("iface %p, attachment %p.\n", iface, attachment); - return ddraw_surface3_AddAttachedSurface(&This->IDirectDrawSurface3_iface, + hr = ddraw_surface3_AddAttachedSurface(&This->IDirectDrawSurface3_iface, attachment_impl ? &attachment_impl->IDirectDrawSurface3_iface : NULL); + if (FAILED(hr)) + { + return hr; + } + ddraw_surface2_AddRef(attachment); + ddraw_surface3_Release(&attachment_impl->IDirectDrawSurface3_iface); + return hr; } static HRESULT WINAPI ddraw_surface1_AddAttachedSurface(IDirectDrawSurface *iface, IDirectDrawSurface *attachment) { IDirectDrawSurfaceImpl *This = impl_from_IDirectDrawSurface(iface); IDirectDrawSurfaceImpl *attachment_impl = unsafe_impl_from_IDirectDrawSurface(attachment); + HRESULT hr; TRACE("iface %p, attachment %p.\n", iface, attachment); - return ddraw_surface3_AddAttachedSurface(&This->IDirectDrawSurface3_iface, + hr = ddraw_surface3_AddAttachedSurface(&This->IDirectDrawSurface3_iface, attachment_impl ? &attachment_impl->IDirectDrawSurface3_iface : NULL); + if (FAILED(hr)) + { + return hr; + } + ddraw_surface1_AddRef(attachment); + ddraw_surface3_Release(&attachment_impl->IDirectDrawSurface3_iface); + return hr; } /***************************************************************************** -- 1.7.5.3