From e9ebbfc0ff70b862db664ae9e0987a7b322c8679 Mon Sep 17 00:00:00 2001
From: Robert Reif <reif@earthlink.net>
Date: Tue, 2 Sep 2003 00:56:14 +0000
Subject: [PATCH] Now that reference counting is correct, there is no need to
 check if the base object goes away.

---
 dlls/dsound/buffer.c         |  10 --
 dlls/dsound/dsound_private.h |   1 -
 dlls/dsound/sound3d.c        | 226 ++++++++++++++---------------------
 3 files changed, 91 insertions(+), 146 deletions(-)

diff --git a/dlls/dsound/buffer.c b/dlls/dsound/buffer.c
index 576d60bafd2..4c29b5b8b01 100644
--- a/dlls/dsound/buffer.c
+++ b/dlls/dsound/buffer.c
@@ -400,16 +400,6 @@ static DWORD WINAPI IDirectSoundBufferImpl_Release(LPDIRECTSOUNDBUFFER8 iface) {
 		}
 	}
 
-	if (This->ds3db) {
-		WARN("ds3db still has reference\n");
-		EnterCriticalSection(&(This->ds3db->lock));
-		This->ds3db->dsb = NULL;
-		LeaveCriticalSection(&(This->ds3db->lock));
-	}
-
-	if (This->iks)
-		IKsPropertySet_Release((LPKSPROPERTYSET)This->iks);
-
 	if (This->notifies != NULL)
 		HeapFree(GetProcessHeap(), 0, This->notifies);
 
diff --git a/dlls/dsound/dsound_private.h b/dlls/dsound/dsound_private.h
index f66cb4b3a24..41a205abe2c 100644
--- a/dlls/dsound/dsound_private.h
+++ b/dlls/dsound/dsound_private.h
@@ -342,7 +342,6 @@ struct IDirectSound3DBufferImpl
     DWORD                       ref;
     /* IDirectSound3DBufferImpl fields */
     IDirectSoundBufferImpl*     dsb;
-    CRITICAL_SECTION            lock;
 };
 
 HRESULT WINAPI IDirectSound3DBufferImpl_Create(
diff --git a/dlls/dsound/sound3d.c b/dlls/dsound/sound3d.c
index 2105bcf9e81..cc2bdeb94b4 100644
--- a/dlls/dsound/sound3d.c
+++ b/dlls/dsound/sound3d.c
@@ -397,7 +397,6 @@ static ULONG WINAPI IDirectSound3DBufferImpl_Release(LPDIRECTSOUND3DBUFFER iface
 	if (!ulReturn) {
 		This->dsb->ds3db = NULL;
 		IDirectSoundBuffer_Release((LPDIRECTSOUNDBUFFER8)This->dsb);
-		DeleteCriticalSection(&(This->lock));
 		HeapFree(GetProcessHeap(),0,This);
 		TRACE("(%p) released\n",This);
 	}
@@ -423,10 +422,8 @@ static HRESULT WINAPI IDirectSound3DBufferImpl_GetAllParameters(
 		return DSERR_INVALIDPARAM;
 	}
 	
-	if (This->dsb) {
-		TRACE("returning: all parameters\n");
-		*lpDs3dBuffer = This->dsb->ds3db_ds3db;
-	}
+	TRACE("returning: all parameters\n");
+	*lpDs3dBuffer = This->dsb->ds3db_ds3db;
 	return DS_OK;
 }
 
@@ -436,12 +433,10 @@ static HRESULT WINAPI IDirectSound3DBufferImpl_GetConeAngles(
 	LPDWORD lpdwOutsideConeAngle)
 {
 	ICOM_THIS(IDirectSound3DBufferImpl,iface);
-	if (This->dsb) {
-		TRACE("returning: Inside Cone Angle = %ld degrees; Outside Cone Angle = %ld degrees\n",
-			This->dsb->ds3db_ds3db.dwInsideConeAngle, This->dsb->ds3db_ds3db.dwOutsideConeAngle);
-		*lpdwInsideConeAngle = This->dsb->ds3db_ds3db.dwInsideConeAngle;
-		*lpdwOutsideConeAngle = This->dsb->ds3db_ds3db.dwOutsideConeAngle;
-	}
+	TRACE("returning: Inside Cone Angle = %ld degrees; Outside Cone Angle = %ld degrees\n",
+		This->dsb->ds3db_ds3db.dwInsideConeAngle, This->dsb->ds3db_ds3db.dwOutsideConeAngle);
+	*lpdwInsideConeAngle = This->dsb->ds3db_ds3db.dwInsideConeAngle;
+	*lpdwOutsideConeAngle = This->dsb->ds3db_ds3db.dwOutsideConeAngle;
 	return DS_OK;
 }
 
@@ -450,13 +445,11 @@ static HRESULT WINAPI IDirectSound3DBufferImpl_GetConeOrientation(
 	LPD3DVECTOR lpvConeOrientation)
 {
 	ICOM_THIS(IDirectSound3DBufferImpl,iface);
-	if (This->dsb) {
-		TRACE("returning: Cone Orientation vector = (%f,%f,%f)\n",
-			This->dsb->ds3db_ds3db.vConeOrientation.u1.x, 
-			This->dsb->ds3db_ds3db.vConeOrientation.u2.y, 
-			This->dsb->ds3db_ds3db.vConeOrientation.u3.z);
-		*lpvConeOrientation = This->dsb->ds3db_ds3db.vConeOrientation;
-	}
+	TRACE("returning: Cone Orientation vector = (%f,%f,%f)\n",
+		This->dsb->ds3db_ds3db.vConeOrientation.u1.x, 
+		This->dsb->ds3db_ds3db.vConeOrientation.u2.y, 
+		This->dsb->ds3db_ds3db.vConeOrientation.u3.z);
+	*lpvConeOrientation = This->dsb->ds3db_ds3db.vConeOrientation;
 	return DS_OK;
 }
 
@@ -465,10 +458,8 @@ static HRESULT WINAPI IDirectSound3DBufferImpl_GetConeOutsideVolume(
 	LPLONG lplConeOutsideVolume)
 {
 	ICOM_THIS(IDirectSound3DBufferImpl,iface);
-	if (This->dsb) {
-		TRACE("returning: Cone Outside Volume = %ld\n", This->dsb->ds3db_ds3db.lConeOutsideVolume);
-		*lplConeOutsideVolume = This->dsb->ds3db_ds3db.lConeOutsideVolume;
-	}
+	TRACE("returning: Cone Outside Volume = %ld\n", This->dsb->ds3db_ds3db.lConeOutsideVolume);
+	*lplConeOutsideVolume = This->dsb->ds3db_ds3db.lConeOutsideVolume;
 	return DS_OK;
 }
 
@@ -477,10 +468,8 @@ static HRESULT WINAPI IDirectSound3DBufferImpl_GetMaxDistance(
 	LPD3DVALUE lpfMaxDistance)
 {
 	ICOM_THIS(IDirectSound3DBufferImpl,iface);
-	if (This->dsb) {
-		TRACE("returning: Max Distance = %f\n", This->dsb->ds3db_ds3db.flMaxDistance);
-		*lpfMaxDistance = This->dsb->ds3db_ds3db.flMaxDistance;
-	}
+	TRACE("returning: Max Distance = %f\n", This->dsb->ds3db_ds3db.flMaxDistance);
+	*lpfMaxDistance = This->dsb->ds3db_ds3db.flMaxDistance;
 	return DS_OK;
 }
 
@@ -489,10 +478,8 @@ static HRESULT WINAPI IDirectSound3DBufferImpl_GetMinDistance(
 	LPD3DVALUE lpfMinDistance)
 {
 	ICOM_THIS(IDirectSound3DBufferImpl,iface);
-	if (This->dsb) {
-		TRACE("returning: Min Distance = %f\n", This->dsb->ds3db_ds3db.flMinDistance);
-		*lpfMinDistance = This->dsb->ds3db_ds3db.flMinDistance;
-	}
+	TRACE("returning: Min Distance = %f\n", This->dsb->ds3db_ds3db.flMinDistance);
+	*lpfMinDistance = This->dsb->ds3db_ds3db.flMinDistance;
 	return DS_OK;
 }
 
@@ -501,10 +488,8 @@ static HRESULT WINAPI IDirectSound3DBufferImpl_GetMode(
 	LPDWORD lpdwMode)
 {
 	ICOM_THIS(IDirectSound3DBufferImpl,iface);
-	if (This->dsb) {
-		TRACE("returning: Mode = %ld\n", This->dsb->ds3db_ds3db.dwMode);
-		*lpdwMode = This->dsb->ds3db_ds3db.dwMode;
-	}
+	TRACE("returning: Mode = %ld\n", This->dsb->ds3db_ds3db.dwMode);
+	*lpdwMode = This->dsb->ds3db_ds3db.dwMode;
 	return DS_OK;
 }
 
@@ -513,13 +498,11 @@ static HRESULT WINAPI IDirectSound3DBufferImpl_GetPosition(
 	LPD3DVECTOR lpvPosition)
 {
 	ICOM_THIS(IDirectSound3DBufferImpl,iface);
-	if (This->dsb) {
-		TRACE("returning: Position vector = (%f,%f,%f)\n",
-			This->dsb->ds3db_ds3db.vPosition.u1.x,
-			This->dsb->ds3db_ds3db.vPosition.u2.y,
-			This->dsb->ds3db_ds3db.vPosition.u3.z);
-		*lpvPosition = This->dsb->ds3db_ds3db.vPosition;
-	}
+	TRACE("returning: Position vector = (%f,%f,%f)\n",
+		This->dsb->ds3db_ds3db.vPosition.u1.x,
+		This->dsb->ds3db_ds3db.vPosition.u2.y,
+		This->dsb->ds3db_ds3db.vPosition.u3.z);
+	*lpvPosition = This->dsb->ds3db_ds3db.vPosition;
 	return DS_OK;
 }
 
@@ -528,13 +511,11 @@ static HRESULT WINAPI IDirectSound3DBufferImpl_GetVelocity(
 	LPD3DVECTOR lpvVelocity)
 {
 	ICOM_THIS(IDirectSound3DBufferImpl,iface);
-	if (This->dsb) {
-		TRACE("returning: Velocity vector = (%f,%f,%f)\n",
-			This->dsb->ds3db_ds3db.vVelocity.u1.x,
-			This->dsb->ds3db_ds3db.vVelocity.u2.y,
-			This->dsb->ds3db_ds3db.vVelocity.u3.z);
-		*lpvVelocity = This->dsb->ds3db_ds3db.vVelocity;
-	}
+	TRACE("returning: Velocity vector = (%f,%f,%f)\n",
+		This->dsb->ds3db_ds3db.vVelocity.u1.x,
+		This->dsb->ds3db_ds3db.vVelocity.u2.y,
+		This->dsb->ds3db_ds3db.vVelocity.u3.z);
+	*lpvVelocity = This->dsb->ds3db_ds3db.vVelocity;
 	return DS_OK;
 }
 
@@ -558,22 +539,15 @@ static HRESULT WINAPI IDirectSound3DBufferImpl_SetAllParameters(
 		return status;
 	}
 
-	EnterCriticalSection(&This->lock);
-	
-	if (This->dsb) {
-		TRACE("setting: all parameters; dwApply = %ld\n", dwApply);
-		This->dsb->ds3db_ds3db = *lpcDs3dBuffer;
-
-		if (dwApply == DS3D_IMMEDIATE)
-		{
-			DSOUND_Mix3DBuffer(This->dsb);
-		}
-		This->dsb->ds3db_need_recalc = TRUE;
-		status = DS_OK;
-	} else
-		WARN("pointer no longer valid\n");
+	TRACE("setting: all parameters; dwApply = %ld\n", dwApply);
+	This->dsb->ds3db_ds3db = *lpcDs3dBuffer;
 
-	LeaveCriticalSection(&This->lock);
+	if (dwApply == DS3D_IMMEDIATE)
+	{
+		DSOUND_Mix3DBuffer(This->dsb);
+	}
+	This->dsb->ds3db_need_recalc = TRUE;
+	status = DS_OK;
 
 	return status;
 }
@@ -587,15 +561,13 @@ static HRESULT WINAPI IDirectSound3DBufferImpl_SetConeAngles(
 	ICOM_THIS(IDirectSound3DBufferImpl,iface);
 	TRACE("setting: Inside Cone Angle = %ld; Outside Cone Angle = %ld; dwApply = %ld\n",
 		dwInsideConeAngle, dwOutsideConeAngle, dwApply);
-	if (This->dsb) {
-		This->dsb->ds3db_ds3db.dwInsideConeAngle = dwInsideConeAngle;
-		This->dsb->ds3db_ds3db.dwOutsideConeAngle = dwOutsideConeAngle;
-		if (dwApply == DS3D_IMMEDIATE)
-		{
-			DSOUND_Mix3DBuffer(This->dsb);
-		}
-		This->dsb->ds3db_need_recalc = TRUE;
+	This->dsb->ds3db_ds3db.dwInsideConeAngle = dwInsideConeAngle;
+	This->dsb->ds3db_ds3db.dwOutsideConeAngle = dwOutsideConeAngle;
+	if (dwApply == DS3D_IMMEDIATE)
+	{
+		DSOUND_Mix3DBuffer(This->dsb);
 	}
+	This->dsb->ds3db_need_recalc = TRUE;
 	return DS_OK;
 }
 
@@ -606,17 +578,15 @@ static HRESULT WINAPI IDirectSound3DBufferImpl_SetConeOrientation(
 {
 	ICOM_THIS(IDirectSound3DBufferImpl,iface);
 	TRACE("setting: Cone Orientation vector = (%f,%f,%f); dwApply = %ld\n", x, y, z, dwApply);
-	if (This->dsb) {
-		This->dsb->ds3db_ds3db.vConeOrientation.u1.x = x;
-		This->dsb->ds3db_ds3db.vConeOrientation.u2.y = y;
-		This->dsb->ds3db_ds3db.vConeOrientation.u3.z = z;
-		if (dwApply == DS3D_IMMEDIATE)
-		{
-			This->dsb->ds3db_need_recalc = FALSE;
-			DSOUND_Mix3DBuffer(This->dsb);
-		}
-		This->dsb->ds3db_need_recalc = TRUE;
+	This->dsb->ds3db_ds3db.vConeOrientation.u1.x = x;
+	This->dsb->ds3db_ds3db.vConeOrientation.u2.y = y;
+	This->dsb->ds3db_ds3db.vConeOrientation.u3.z = z;
+	if (dwApply == DS3D_IMMEDIATE)
+	{
+		This->dsb->ds3db_need_recalc = FALSE;
+		DSOUND_Mix3DBuffer(This->dsb);
 	}
+	This->dsb->ds3db_need_recalc = TRUE;
 	return DS_OK;
 }
 
@@ -627,15 +597,13 @@ static HRESULT WINAPI IDirectSound3DBufferImpl_SetConeOutsideVolume(
 {
 	ICOM_THIS(IDirectSound3DBufferImpl,iface);
 	TRACE("setting: ConeOutsideVolume = %ld; dwApply = %ld\n", lConeOutsideVolume, dwApply);
-	if (This->dsb) {
-		This->dsb->ds3db_ds3db.lConeOutsideVolume = lConeOutsideVolume;
-		if (dwApply == DS3D_IMMEDIATE)
-		{
-			This->dsb->ds3db_need_recalc = FALSE;
-			DSOUND_Mix3DBuffer(This->dsb);
-		}
-		This->dsb->ds3db_need_recalc = TRUE;
+	This->dsb->ds3db_ds3db.lConeOutsideVolume = lConeOutsideVolume;
+	if (dwApply == DS3D_IMMEDIATE)
+	{
+		This->dsb->ds3db_need_recalc = FALSE;
+		DSOUND_Mix3DBuffer(This->dsb);
 	}
+	This->dsb->ds3db_need_recalc = TRUE;
 	return DS_OK;
 }
 
@@ -646,15 +614,13 @@ static HRESULT WINAPI IDirectSound3DBufferImpl_SetMaxDistance(
 {
 	ICOM_THIS(IDirectSound3DBufferImpl,iface);
 	TRACE("setting: MaxDistance = %f; dwApply = %ld\n", fMaxDistance, dwApply);
-	if (This->dsb) {
-		This->dsb->ds3db_ds3db.flMaxDistance = fMaxDistance;
-		if (dwApply == DS3D_IMMEDIATE)
-		{
-			This->dsb->ds3db_need_recalc = FALSE;
-			DSOUND_Mix3DBuffer(This->dsb);
-		}
-		This->dsb->ds3db_need_recalc = TRUE;
+	This->dsb->ds3db_ds3db.flMaxDistance = fMaxDistance;
+	if (dwApply == DS3D_IMMEDIATE)
+	{
+		This->dsb->ds3db_need_recalc = FALSE;
+		DSOUND_Mix3DBuffer(This->dsb);
 	}
+	This->dsb->ds3db_need_recalc = TRUE;
 	return DS_OK;
 }
 
@@ -665,15 +631,13 @@ static HRESULT WINAPI IDirectSound3DBufferImpl_SetMinDistance(
 {
 	ICOM_THIS(IDirectSound3DBufferImpl,iface);
 	TRACE("setting: MinDistance = %f; dwApply = %ld\n", fMinDistance, dwApply);
-	if (This->dsb) {
-		This->dsb->ds3db_ds3db.flMinDistance = fMinDistance;
-		if (dwApply == DS3D_IMMEDIATE)
-		{
-			This->dsb->ds3db_need_recalc = FALSE;
-			DSOUND_Mix3DBuffer(This->dsb);
-		}
-		This->dsb->ds3db_need_recalc = TRUE;
+	This->dsb->ds3db_ds3db.flMinDistance = fMinDistance;
+	if (dwApply == DS3D_IMMEDIATE)
+	{
+		This->dsb->ds3db_need_recalc = FALSE;
+		DSOUND_Mix3DBuffer(This->dsb);
 	}
+	This->dsb->ds3db_need_recalc = TRUE;
 	return DS_OK;
 }
 
@@ -684,15 +648,13 @@ static HRESULT WINAPI IDirectSound3DBufferImpl_SetMode(
 {
 	ICOM_THIS(IDirectSound3DBufferImpl,iface);
 	TRACE("setting: Mode = %ld; dwApply = %ld\n", dwMode, dwApply);
-	if (This->dsb) {
-		This->dsb->ds3db_ds3db.dwMode = dwMode;
-		if (dwApply == DS3D_IMMEDIATE)
-		{
-			This->dsb->ds3db_need_recalc = FALSE;
-			DSOUND_Mix3DBuffer(This->dsb);
-		}
-		This->dsb->ds3db_need_recalc = TRUE;
+	This->dsb->ds3db_ds3db.dwMode = dwMode;
+	if (dwApply == DS3D_IMMEDIATE)
+	{
+		This->dsb->ds3db_need_recalc = FALSE;
+		DSOUND_Mix3DBuffer(This->dsb);
 	}
+	This->dsb->ds3db_need_recalc = TRUE;
 	return DS_OK;
 }
 
@@ -703,17 +665,15 @@ static HRESULT WINAPI IDirectSound3DBufferImpl_SetPosition(
 {
 	ICOM_THIS(IDirectSound3DBufferImpl,iface);
 	TRACE("setting: Position vector = (%f,%f,%f); dwApply = %ld\n", x, y, z, dwApply);
-	if (This->dsb) {
-		This->dsb->ds3db_ds3db.vPosition.u1.x = x;
-		This->dsb->ds3db_ds3db.vPosition.u2.y = y;
-		This->dsb->ds3db_ds3db.vPosition.u3.z = z;
-		if (dwApply == DS3D_IMMEDIATE)
-		{
-			This->dsb->ds3db_need_recalc = FALSE;
-			DSOUND_Mix3DBuffer(This->dsb);
-		}
-		This->dsb->ds3db_need_recalc = TRUE;
+	This->dsb->ds3db_ds3db.vPosition.u1.x = x;
+	This->dsb->ds3db_ds3db.vPosition.u2.y = y;
+	This->dsb->ds3db_ds3db.vPosition.u3.z = z;
+	if (dwApply == DS3D_IMMEDIATE)
+	{
+		This->dsb->ds3db_need_recalc = FALSE;
+		DSOUND_Mix3DBuffer(This->dsb);
 	}
+	This->dsb->ds3db_need_recalc = TRUE;
 	return DS_OK;
 }
 
@@ -724,17 +684,15 @@ static HRESULT WINAPI IDirectSound3DBufferImpl_SetVelocity(
 {
 	ICOM_THIS(IDirectSound3DBufferImpl,iface);
 	TRACE("setting: Velocity vector = (%f,%f,%f); dwApply = %ld\n", x, y, z, dwApply);
-	if (This->dsb) {
-		This->dsb->ds3db_ds3db.vVelocity.u1.x = x;
-		This->dsb->ds3db_ds3db.vVelocity.u2.y = y;
-		This->dsb->ds3db_ds3db.vVelocity.u3.z = z;
-		if (dwApply == DS3D_IMMEDIATE)
-		{
-			This->dsb->ds3db_need_recalc = FALSE;
-			DSOUND_Mix3DBuffer(This->dsb);
-		}
-		This->dsb->ds3db_need_recalc = TRUE;
+	This->dsb->ds3db_ds3db.vVelocity.u1.x = x;
+	This->dsb->ds3db_ds3db.vVelocity.u2.y = y;
+	This->dsb->ds3db_ds3db.vVelocity.u3.z = z;
+	if (dwApply == DS3D_IMMEDIATE)
+	{
+		This->dsb->ds3db_need_recalc = FALSE;
+		DSOUND_Mix3DBuffer(This->dsb);
 	}
+	This->dsb->ds3db_need_recalc = TRUE;
 	return DS_OK;
 }
 
@@ -804,8 +762,6 @@ HRESULT WINAPI IDirectSound3DBufferImpl_Create(
 
 	ds3db->dsb->ds3db_need_recalc = TRUE;
 
-	InitializeCriticalSection(&(ds3db->lock));
-
 	IDirectSoundBuffer_AddRef((LPDIRECTSOUNDBUFFER8)dsb);
 
 	*pds3db = ds3db;
-- 
GitLab