mirror of
https://github.com/reactos/reactos.git
synced 2024-12-28 01:55:19 +00:00
[WDMAUD] Close mixers on cleanup. Should fix CORE-10735 definitely (#21)
[WDMAUD] Close mixers on cleanup. CORE-10735
This commit is contained in:
parent
d788a52c79
commit
c51df789e8
3 changed files with 36 additions and 1 deletions
|
@ -326,6 +326,7 @@ WdmAudCleanup(
|
|||
/* found an still open audio pin */
|
||||
ZwClose(pClient->hPins[Index].Handle);
|
||||
}
|
||||
WdmAudCloseAllMixers(DeviceObject, pClient, Index);
|
||||
}
|
||||
|
||||
/* free pin array */
|
||||
|
|
|
@ -480,7 +480,7 @@ WdmAudControlCloseMixer(
|
|||
IN ULONG Index)
|
||||
{
|
||||
/* Remove event associated to this client */
|
||||
if (MMixerClose(&MixerContext, DeviceInfo->DeviceIndex, ClientInfo, EventCallback))
|
||||
if (MMixerClose(&MixerContext, DeviceInfo->DeviceIndex, ClientInfo, EventCallback) != MM_STATUS_SUCCESS)
|
||||
{
|
||||
DPRINT1("Failed to close mixer\n");
|
||||
return SetIrpIoStatus(Irp, STATUS_UNSUCCESSFUL, sizeof(WDMAUD_DEVICE_INFO));
|
||||
|
@ -497,6 +497,34 @@ WdmAudControlCloseMixer(
|
|||
return SetIrpIoStatus(Irp, STATUS_SUCCESS, sizeof(WDMAUD_DEVICE_INFO));
|
||||
}
|
||||
|
||||
VOID
|
||||
WdmAudCloseAllMixers(
|
||||
IN PDEVICE_OBJECT DeviceObject,
|
||||
IN PWDMAUD_CLIENT ClientInfo,
|
||||
IN ULONG Index)
|
||||
{
|
||||
ULONG DeviceCount, DeviceIndex;
|
||||
|
||||
/* Get all mixers */
|
||||
DeviceCount = GetSysAudioDeviceCount(DeviceObject);
|
||||
|
||||
/* Close every mixer attached to the device */
|
||||
for (DeviceIndex = 0; DeviceIndex < DeviceCount; DeviceIndex++)
|
||||
{
|
||||
if (MMixerClose(&MixerContext, DeviceIndex, ClientInfo, EventCallback) != MM_STATUS_SUCCESS)
|
||||
{
|
||||
DPRINT1("Failed to close mixer for device %lu\n", DeviceIndex);
|
||||
}
|
||||
}
|
||||
|
||||
/* Dereference event */
|
||||
if (ClientInfo->hPins[Index].NotifyEvent)
|
||||
{
|
||||
ObDereferenceObject(ClientInfo->hPins[Index].NotifyEvent);
|
||||
ClientInfo->hPins[Index].NotifyEvent = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
NTSTATUS
|
||||
NTAPI
|
||||
WdmAudGetControlDetails(
|
||||
|
|
|
@ -136,6 +136,12 @@ WdmAudControlCloseMixer(
|
|||
IN PWDMAUD_CLIENT ClientInfo,
|
||||
IN ULONG Index);
|
||||
|
||||
VOID
|
||||
WdmAudCloseAllMixers(
|
||||
IN PDEVICE_OBJECT DeviceObject,
|
||||
IN PWDMAUD_CLIENT ClientInfo,
|
||||
IN ULONG Index);
|
||||
|
||||
NTSTATUS
|
||||
WdmAudControlOpenWave(
|
||||
IN PDEVICE_OBJECT DeviceObject,
|
||||
|
|
Loading…
Reference in a new issue