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/topolog... ============================================================================== --- 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); }