From 1df8bd39eecf25e1b556ab691f415a3f7215c752 Mon Sep 17 00:00:00 2001 From: Magnus Olsen Date: Sun, 6 Aug 2006 09:56:21 +0000 Subject: [PATCH] Bugfix DirectDraw_AddRef svn path=/trunk/; revision=23493 --- reactos/dll/directx/ddraw/main/ddraw_main.c | 28 ++++++++++++++------- reactos/dll/directx/ddraw/rosdraw.h | 2 ++ reactos/dll/directx/ddraw/startup.c | 3 ++- 3 files changed, 23 insertions(+), 10 deletions(-) diff --git a/reactos/dll/directx/ddraw/main/ddraw_main.c b/reactos/dll/directx/ddraw/main/ddraw_main.c index b49f27ef75d..6b907635add 100644 --- a/reactos/dll/directx/ddraw/main/ddraw_main.c +++ b/reactos/dll/directx/ddraw/main/ddraw_main.c @@ -61,13 +61,18 @@ Main_DirectDraw_AddRef (LPDIRECTDRAW7 iface) DX_WINDBG_trace(); IDirectDrawImpl* This = (IDirectDrawImpl*)iface; - ULONG ref=0; - + if (iface!=NULL) { - ref = InterlockedIncrement( (PLONG) &This->mDDrawLocal.dwLocalRefCnt); + This->mDDrawLocal.dwLocalRefCnt++; + This->Ref++; + + if (This->mDDrawLocal.lpGbl != NULL) + { + This->mDDrawLocal.lpGbl->dwRefCnt++; + } } - return ref; + return This->Ref; } /* @@ -81,13 +86,18 @@ Main_DirectDraw_Release (LPDIRECTDRAW7 iface) DX_WINDBG_trace(); IDirectDrawImpl* This = (IDirectDrawImpl*)iface; - ULONG ref=0; - + if (iface!=NULL) { - ref = InterlockedDecrement( (PLONG) &This->mDDrawLocal.dwLocalRefCnt); + This->mDDrawLocal.dwLocalRefCnt--; + This->Ref--; + + if (This->mDDrawLocal.lpGbl != NULL) + { + This->mDDrawLocal.lpGbl->dwRefCnt--; + } - if (ref == 0) + if ( This->Ref == 0) { // set resoltion back to the one in registry if(This->cooperative_level & DDSCL_EXCLUSIVE) @@ -102,7 +112,7 @@ Main_DirectDraw_Release (LPDIRECTDRAW7 iface) } } } - return ref; + return This->Ref; } /* diff --git a/reactos/dll/directx/ddraw/rosdraw.h b/reactos/dll/directx/ddraw/rosdraw.h index 8f356ff301a..c9196621c74 100644 --- a/reactos/dll/directx/ddraw/rosdraw.h +++ b/reactos/dll/directx/ddraw/rosdraw.h @@ -50,6 +50,8 @@ typedef struct IDirectDraw2Vtbl* lpVtbl_v2; IDirectDrawVtbl* lpVtbl_v1; + ULONG Ref; + /* The main struct that contain all info from the HAL and HEL */ HDC hdc; DDRAWI_DIRECTDRAW_GBL mDDrawGlobal; diff --git a/reactos/dll/directx/ddraw/startup.c b/reactos/dll/directx/ddraw/startup.c index aa9ff6aeb0f..fdb860f2d50 100644 --- a/reactos/dll/directx/ddraw/startup.c +++ b/reactos/dll/directx/ddraw/startup.c @@ -212,7 +212,8 @@ StartDirectDraw(LPDIRECTDRAW* iface) /* Setup calback struct so we do not need refill same info again */ This->mDdCreateSurface.lpDD = &This->mDDrawGlobal; This->mDdCanCreateSurface.lpDD = &This->mDDrawGlobal; - + + This->mDDrawLocal.lpGbl = &This->mDDrawGlobal; return DD_OK; }