ddraw: IDirectDraw3 should use its own ref count variable.
This commit is contained in:
parent
f26cb44c73
commit
325f666fc5
|
@ -96,7 +96,7 @@ struct IDirectDrawImpl
|
||||||
ICOM_VFIELD_MULTI(IDirect3D);
|
ICOM_VFIELD_MULTI(IDirect3D);
|
||||||
|
|
||||||
/* See comment in IDirectDraw::AddRef */
|
/* See comment in IDirectDraw::AddRef */
|
||||||
LONG ref7, ref4, ref2, ref1, numIfaces;
|
LONG ref7, ref4, ref2, ref3, ref1, numIfaces;
|
||||||
|
|
||||||
/* WineD3D linkage */
|
/* WineD3D linkage */
|
||||||
IWineD3D *wineD3D;
|
IWineD3D *wineD3D;
|
||||||
|
|
|
@ -110,9 +110,9 @@ static ULONG WINAPI
|
||||||
IDirectDraw3Impl_AddRef(LPDIRECTDRAW3 iface)
|
IDirectDraw3Impl_AddRef(LPDIRECTDRAW3 iface)
|
||||||
{
|
{
|
||||||
ICOM_THIS_FROM(IDirectDrawImpl, IDirectDraw3, iface);
|
ICOM_THIS_FROM(IDirectDrawImpl, IDirectDraw3, iface);
|
||||||
ULONG ref = InterlockedIncrement(&This->ref4);
|
ULONG ref = InterlockedIncrement(&This->ref3);
|
||||||
|
|
||||||
TRACE("(%p) : incrementing IDirectDraw4 refcount from %u.\n", This, ref -1);
|
TRACE("(%p) : incrementing IDirectDraw3 refcount from %u.\n", This, ref -1);
|
||||||
|
|
||||||
if(ref == 1) InterlockedIncrement(&This->numIfaces);
|
if(ref == 1) InterlockedIncrement(&This->numIfaces);
|
||||||
|
|
||||||
|
@ -170,9 +170,9 @@ static ULONG WINAPI
|
||||||
IDirectDraw3Impl_Release(LPDIRECTDRAW3 iface)
|
IDirectDraw3Impl_Release(LPDIRECTDRAW3 iface)
|
||||||
{
|
{
|
||||||
ICOM_THIS_FROM(IDirectDrawImpl, IDirectDraw3, iface);
|
ICOM_THIS_FROM(IDirectDrawImpl, IDirectDraw3, iface);
|
||||||
ULONG ref = InterlockedDecrement(&This->ref4);
|
ULONG ref = InterlockedDecrement(&This->ref3);
|
||||||
|
|
||||||
TRACE_(ddraw)("(%p)->() decrementing IDirectDraw4 refcount from %u.\n", This, ref +1);
|
TRACE_(ddraw)("(%p)->() decrementing IDirectDraw3 refcount from %u.\n", This, ref +1);
|
||||||
|
|
||||||
if(ref == 0)
|
if(ref == 0)
|
||||||
{
|
{
|
||||||
|
|
|
@ -882,11 +882,12 @@ DllMain(HINSTANCE hInstDLL,
|
||||||
int i;
|
int i;
|
||||||
IDirectDrawImpl *ddraw = LIST_ENTRY(entry, IDirectDrawImpl, ddraw_list_entry);
|
IDirectDrawImpl *ddraw = LIST_ENTRY(entry, IDirectDrawImpl, ddraw_list_entry);
|
||||||
|
|
||||||
WARN("DDraw %p has a refcount of %d\n", ddraw, ddraw->ref7 + ddraw->ref4 + ddraw->ref2 + ddraw->ref1);
|
WARN("DDraw %p has a refcount of %d\n", ddraw, ddraw->ref7 + ddraw->ref4 + ddraw->ref3 + ddraw->ref2 + ddraw->ref1);
|
||||||
|
|
||||||
/* Add references to each interface to avoid freeing them unexpectadely */
|
/* Add references to each interface to avoid freeing them unexpectadely */
|
||||||
IDirectDraw_AddRef(ICOM_INTERFACE(ddraw, IDirectDraw));
|
IDirectDraw_AddRef(ICOM_INTERFACE(ddraw, IDirectDraw));
|
||||||
IDirectDraw2_AddRef(ICOM_INTERFACE(ddraw, IDirectDraw2));
|
IDirectDraw2_AddRef(ICOM_INTERFACE(ddraw, IDirectDraw2));
|
||||||
|
IDirectDraw3_AddRef(ICOM_INTERFACE(ddraw, IDirectDraw3));
|
||||||
IDirectDraw4_AddRef(ICOM_INTERFACE(ddraw, IDirectDraw4));
|
IDirectDraw4_AddRef(ICOM_INTERFACE(ddraw, IDirectDraw4));
|
||||||
IDirectDraw7_AddRef(ICOM_INTERFACE(ddraw, IDirectDraw7));
|
IDirectDraw7_AddRef(ICOM_INTERFACE(ddraw, IDirectDraw7));
|
||||||
|
|
||||||
|
@ -925,6 +926,7 @@ DllMain(HINSTANCE hInstDLL,
|
||||||
*/
|
*/
|
||||||
while(IDirectDraw_Release(ICOM_INTERFACE(ddraw, IDirectDraw)));
|
while(IDirectDraw_Release(ICOM_INTERFACE(ddraw, IDirectDraw)));
|
||||||
while(IDirectDraw2_Release(ICOM_INTERFACE(ddraw, IDirectDraw2)));
|
while(IDirectDraw2_Release(ICOM_INTERFACE(ddraw, IDirectDraw2)));
|
||||||
|
while(IDirectDraw3_Release(ICOM_INTERFACE(ddraw, IDirectDraw3)));
|
||||||
while(IDirectDraw4_Release(ICOM_INTERFACE(ddraw, IDirectDraw4)));
|
while(IDirectDraw4_Release(ICOM_INTERFACE(ddraw, IDirectDraw4)));
|
||||||
while(IDirectDraw7_Release(ICOM_INTERFACE(ddraw, IDirectDraw7)));
|
while(IDirectDraw7_Release(ICOM_INTERFACE(ddraw, IDirectDraw7)));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue