From 93a8c8a165203c702a28bd987636d22c33a22e98 Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Sun, 21 Jun 2009 10:48:09 +0000 Subject: [PATCH] - Don't release object which drivers should release - Fixes a few crashes when starting another audio stream svn path=/trunk/; revision=41512 --- .../drivers/wdm/audio/backpln/portcls/pin_wavecyclic.c | 7 ++----- .../drivers/wdm/audio/backpln/portcls/pin_wavepci.c | 10 +--------- reactos/drivers/wdm/audio/backpln/portcls/pin_wavert.c | 3 +-- 3 files changed, 4 insertions(+), 16 deletions(-) diff --git a/reactos/drivers/wdm/audio/backpln/portcls/pin_wavecyclic.c b/reactos/drivers/wdm/audio/backpln/portcls/pin_wavecyclic.c index 2cf58e87849..97816675a33 100644 --- a/reactos/drivers/wdm/audio/backpln/portcls/pin_wavecyclic.c +++ b/reactos/drivers/wdm/audio/backpln/portcls/pin_wavecyclic.c @@ -692,8 +692,6 @@ CloseStreamRoutine( } This->ServiceGroup->lpVtbl->RemoveMember(This->ServiceGroup, (PSERVICESINK)&This->lpVtblServiceSink); - This->ServiceGroup->lpVtbl->Release(This->ServiceGroup); - This->DmaChannel->lpVtbl->Release(This->DmaChannel); Status = This->Port->lpVtbl->QueryInterface(This->Port, &IID_ISubdevice, (PVOID*)&ISubDevice); if (NT_SUCCESS(Status)) @@ -735,7 +733,6 @@ CloseStreamRoutine( This->Filter->lpVtbl->FreePin(This->Filter, (IPortPinWaveCyclic*)This); DPRINT1("Closing stream at Irql %u\n", KeGetCurrentIrql()); Stream->lpVtbl->Release(Stream); - /* this line is never reached */ } } @@ -1064,8 +1061,8 @@ IPortPinWaveCyclic_fnInit( Status = This->Stream->lpVtbl->SetNotificationFreq(This->Stream, 10, &This->FrameSize); //This->Stream->lpVtbl->SetFormat(This->Stream, (PKSDATAFORMAT)This->Format); - DPRINT1("Setting state to acquire %x\n", This->Stream->lpVtbl->SetState(This->Stream, KSSTATE_ACQUIRE)); - DPRINT1("Setting state to pause %x\n", This->Stream->lpVtbl->SetState(This->Stream, KSSTATE_PAUSE)); + DPRINT1("Setting state to acquire %x\n", This->Stream->lpVtbl->SetState(This->Stream, KSSTATE_ACQUIRE)); + DPRINT1("Setting state to pause %x\n", This->Stream->lpVtbl->SetState(This->Stream, KSSTATE_PAUSE)); This->State = KSSTATE_PAUSE; diff --git a/reactos/drivers/wdm/audio/backpln/portcls/pin_wavepci.c b/reactos/drivers/wdm/audio/backpln/portcls/pin_wavepci.c index 53736675318..87ecace3869 100644 --- a/reactos/drivers/wdm/audio/backpln/portcls/pin_wavepci.c +++ b/reactos/drivers/wdm/audio/backpln/portcls/pin_wavepci.c @@ -391,14 +391,12 @@ CloseStreamRoutine( if (This->State != KSSTATE_STOP) { This->Stream->lpVtbl->SetState(This->Stream, KSSTATE_STOP); - KeStallExecutionProcessor(10); } } if (This->ServiceGroup) { This->ServiceGroup->lpVtbl->RemoveMember(This->ServiceGroup, (PSERVICESINK)&This->lpVtblServiceSink); - This->ServiceGroup->lpVtbl->Release(This->ServiceGroup); } Status = This->Port->lpVtbl->QueryInterface(This->Port, &IID_ISubdevice, (PVOID*)&ISubDevice); @@ -407,9 +405,9 @@ CloseStreamRoutine( Status = ISubDevice->lpVtbl->GetDescriptor(ISubDevice, &Descriptor); if (NT_SUCCESS(Status)) { - ISubDevice->lpVtbl->Release(ISubDevice); Descriptor->Factory.Instances[This->ConnectDetails->PinId].CurrentPinInstanceCount--; } + ISubDevice->lpVtbl->Release(ISubDevice); } if (This->Format) @@ -418,11 +416,6 @@ CloseStreamRoutine( This->Format = NULL; } - if (This->WaveStream) - { - This->WaveStream->lpVtbl->Release(This->WaveStream); - } - /* complete the irp */ Ctx->Irp->IoStatus.Information = 0; Ctx->Irp->IoStatus.Status = STATUS_SUCCESS; @@ -440,7 +433,6 @@ CloseStreamRoutine( This->Stream = NULL; DPRINT1("Closing stream at Irql %u\n", KeGetCurrentIrql()); Stream->lpVtbl->Release(Stream); - /* this line is never reached */ } } diff --git a/reactos/drivers/wdm/audio/backpln/portcls/pin_wavert.c b/reactos/drivers/wdm/audio/backpln/portcls/pin_wavert.c index adfabc09186..aaff97fcc69 100644 --- a/reactos/drivers/wdm/audio/backpln/portcls/pin_wavert.c +++ b/reactos/drivers/wdm/audio/backpln/portcls/pin_wavert.c @@ -702,9 +702,9 @@ CloseStreamRoutine( Status = ISubDevice->lpVtbl->GetDescriptor(ISubDevice, &Descriptor); if (NT_SUCCESS(Status)) { - ISubDevice->lpVtbl->Release(ISubDevice); Descriptor->Factory.Instances[This->ConnectDetails->PinId].CurrentPinInstanceCount--; } + ISubDevice->lpVtbl->Release(ISubDevice); } if (This->Format) @@ -735,7 +735,6 @@ CloseStreamRoutine( This->Stream = NULL; DPRINT1("Closing stream at Irql %u\n", KeGetCurrentIrql()); Stream->lpVtbl->Release(Stream); - /* this line is never reached */ } }