Author: janderwald
Date: Fri Jul 10 01:49:04 2009
New Revision: 41835
URL:
http://svn.reactos.org/svn/reactos?rev=41835&view=rev
Log:
- Fix a bug which was responsible for most audio-related crashes
- Found by DosX (Gregor Schneider)
- Fix memory leak
See issue #4674 for more details.
Modified:
trunk/reactos/drivers/ksfilter/ks/topology.c
trunk/reactos/drivers/wdm/audio/sysaudio/control.c
Modified: trunk/reactos/drivers/ksfilter/ks/topology.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/ksfilter/ks/topolo…
==============================================================================
--- trunk/reactos/drivers/ksfilter/ks/topology.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/ksfilter/ks/topology.c [iso-8859-1] Fri Jul 10 01:49:04 2009
@@ -19,7 +19,7 @@
OBJECT_ATTRIBUTES ObjectAttributes;
UNICODE_STRING Name;
- Name.Length = (wcslen(ObjectType) + 1) * sizeof(WCHAR) + CreateParametersSize;
+ Name.Length = Name.MaximumLength = (wcslen(ObjectType) + 1) * sizeof(WCHAR) +
CreateParametersSize;
Name.MaximumLength += sizeof(WCHAR);
Name.Buffer = ExAllocatePool(NonPagedPool, Name.MaximumLength);
@@ -52,8 +52,7 @@
NULL,
IO_NO_PARAMETER_CHECKING | IO_FORCE_ACCESS_CHECK);
- // HACK HACK HACK HACK
- //ExFreePool(Name.Buffer);
+ ExFreePool(Name.Buffer);
return Status;
}
Modified: trunk/reactos/drivers/wdm/audio/sysaudio/control.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/wdm/audio/sysaudio…
==============================================================================
--- trunk/reactos/drivers/wdm/audio/sysaudio/control.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/wdm/audio/sysaudio/control.c [iso-8859-1] Fri Jul 10 01:49:04
2009
@@ -42,7 +42,7 @@
OBJECT_ATTRIBUTES ObjectAttributes;
UNICODE_STRING Name;
- Name.Length = (wcslen(ObjectType) + 1) * sizeof(WCHAR) + CreateParametersSize;
+ Name.Length = Name.MaximumLength = (wcslen(ObjectType) + 1) * sizeof(WCHAR) +
CreateParametersSize;
Name.MaximumLength += sizeof(WCHAR);
Name.Buffer = ExAllocatePool(NonPagedPool, Name.MaximumLength);
@@ -75,6 +75,8 @@
NULL,
IO_NO_PARAMETER_CHECKING | IO_FORCE_ACCESS_CHECK);
+ ExFreePool(Name.Buffer);
+
return Status;
}
@@ -984,6 +986,7 @@
RtlStringFromGUID(&Property->Set, &GuidString);
DPRINT1("Unhandeled property Set |%S| Id %u Flags %x\n", GuidString.Buffer,
Property->Id, Property->Flags);
+ DbgBreakPoint();
RtlFreeUnicodeString(&GuidString);
return SetIrpIoStatus(Irp, STATUS_UNSUCCESSFUL, 0);
}