Ričardas Barkauskas : ddraw: AddRef the surface in AddAttachedSurface instead of helper function.

Alexandre Julliard julliard at winehq.org
Tue Jun 21 12:25:42 CDT 2011


Module: wine
Branch: master
Commit: ec754ab98b3f120aad154c06b4b9040181c9fb34
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=ec754ab98b3f120aad154c06b4b9040181c9fb34

Author: Ričardas Barkauskas <rbarkauskas at codeweavers.com>
Date:   Tue Jun 21 00:30:12 2011 +0300

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;
 }
 
 /*****************************************************************************




More information about the wine-cvs mailing list