[SYSAUDIO]
authorJohannes Anderwald <johannes.anderwald@reactos.org>
Sat, 19 Jun 2010 07:26:20 +0000 (07:26 +0000)
committerJohannes Anderwald <johannes.anderwald@reactos.org>
Sat, 19 Jun 2010 07:26:20 +0000 (07:26 +0000)
- Perform all allocations / frees in dedicated alloc / free function

svn path=/trunk/; revision=47804

reactos/drivers/wdm/audio/sysaudio/control.c
reactos/drivers/wdm/audio/sysaudio/deviface.c
reactos/drivers/wdm/audio/sysaudio/dispatcher.c
reactos/drivers/wdm/audio/sysaudio/main.c
reactos/drivers/wdm/audio/sysaudio/pin.c
reactos/drivers/wdm/audio/sysaudio/sysaudio.h

index 6a2466c..459065a 100644 (file)
@@ -145,7 +145,7 @@ ComputeCompatibleFormat(
     ULONG Index;
 
     Length = sizeof(KSP_PIN) + sizeof(KSMULTIPLE_ITEM) + ClientFormat->DataFormat.FormatSize;
-    PinRequest = ExAllocatePool(NonPagedPool, Length);
+    PinRequest = AllocateItem(NonPagedPool, Length);
     if (!PinRequest)
         return STATUS_UNSUCCESSFUL;
 
@@ -166,7 +166,7 @@ ComputeCompatibleFormat(
 
     if (NT_SUCCESS(Status))
     {
-        ExFreePool(PinRequest);
+        FreeItem(PinRequest);
         return Status;
     }
 
@@ -181,10 +181,10 @@ ComputeCompatibleFormat(
         return Status;
     }
 
-    MultipleItem = ExAllocatePool(NonPagedPool, BytesReturned);
+    MultipleItem = AllocateItem(NonPagedPool, BytesReturned);
     if (!MultipleItem)
     {
-        ExFreePool(PinRequest);
+        FreeItem(PinRequest);
         return STATUS_NO_MEMORY;
     }
 
@@ -192,8 +192,8 @@ ComputeCompatibleFormat(
     if (!NT_SUCCESS(Status))
     {
         DPRINT("Property Request KSPROPERTY_PIN_DATARANGES failed with %x\n", Status);
-        ExFreePool(MultipleItem);
-        ExFreePool(PinRequest);
+        FreeItem(MultipleItem);
+        FreeItem(PinRequest);
         return STATUS_UNSUCCESSFUL;
     }
 
@@ -253,8 +253,8 @@ ComputeCompatibleFormat(
 
 #endif
 
-    ExFreePool(MultipleItem);
-    ExFreePool(PinRequest);
+    FreeItem(MultipleItem);
+    FreeItem(PinRequest);
 
     if (bFound)
         return STATUS_SUCCESS;
index e1a0cfe..605946c 100644 (file)
@@ -70,7 +70,7 @@ InsertAudioDevice(
     PKSAUDIO_DEVICE_ENTRY DeviceEntry = NULL;
 
     /* a new device has arrived */
-    DeviceEntry = ExAllocatePool(NonPagedPool, sizeof(KSAUDIO_DEVICE_ENTRY));
+    DeviceEntry = AllocateItem(NonPagedPool, sizeof(KSAUDIO_DEVICE_ENTRY));
     if (!DeviceEntry)
     {
         /* no memory */
@@ -84,7 +84,7 @@ InsertAudioDevice(
     DeviceEntry->DeviceName.Length = 0;
     DeviceEntry->DeviceName.MaximumLength = DeviceName->MaximumLength + 10 * sizeof(WCHAR);
 
-    DeviceEntry->DeviceName.Buffer = ExAllocatePool(NonPagedPool, DeviceEntry->DeviceName.MaximumLength);
+    DeviceEntry->DeviceName.Buffer = AllocateItem(NonPagedPool, DeviceEntry->DeviceName.MaximumLength);
 
     if (!DeviceEntry->DeviceName.Buffer)
     {
@@ -115,9 +115,9 @@ cleanup:
     if (DeviceEntry)
     {
         if (DeviceEntry->DeviceName.Buffer)
-            ExFreePool(DeviceEntry->DeviceName.Buffer);
+            FreeItem(DeviceEntry->DeviceName.Buffer);
 
-        ExFreePool(DeviceEntry);
+        FreeItem(DeviceEntry);
     }
 
     return Status;
index e29b8b4..6c0f58d 100644 (file)
@@ -70,7 +70,7 @@ DispatchCreateSysAudio(
     DPRINT("DispatchCreateSysAudio entered\n");
 
     /* allocate create item */
-    CreateItem = ExAllocatePool(NonPagedPool, sizeof(KSOBJECT_CREATE_ITEM));
+    CreateItem = AllocateItem(NonPagedPool, sizeof(KSOBJECT_CREATE_ITEM));
     if (!CreateItem)
     {
         Irp->IoStatus.Information = 0;
@@ -105,7 +105,7 @@ SysAudioAllocateDeviceHeader(
     PKSOBJECT_CREATE_ITEM CreateItem;
 
     /* allocate create item */
-    CreateItem = ExAllocatePool(NonPagedPool, sizeof(KSOBJECT_CREATE_ITEM));
+    CreateItem = AllocateItem(NonPagedPool, sizeof(KSOBJECT_CREATE_ITEM));
     if (!CreateItem)
         return STATUS_INSUFFICIENT_RESOURCES;
 
index de1e06e..2df6f55 100644 (file)
@@ -18,6 +18,25 @@ const GUID KSCATEGORY_PREFERRED_WAVEOUT_DEVICE = {0xD6C5066EL, 0x72C1, 0x11D2, {
 const GUID KSCATEGORY_PREFERRED_WAVEIN_DEVICE  = {0xD6C50671L, 0x72C1, 0x11D2, {0x97, 0x55, 0x00, 0x00, 0xF8, 0x00, 0x47, 0x88}};
 const GUID KSCATEGORY_PREFERRED_MIDIOUT_DEVICE = {0xD6C50674L, 0x72C1, 0x11D2, {0x97, 0x55, 0x00, 0x00, 0xF8, 0x00, 0x47, 0x88}};
 
+PVOID
+AllocateItem(
+    IN POOL_TYPE PoolType,
+    IN SIZE_T NumberOfBytes)
+{
+    PVOID Item = ExAllocatePool(PoolType, NumberOfBytes);
+    if (!Item)
+        return Item;
+
+    RtlZeroMemory(Item, NumberOfBytes);
+    return Item;
+}
+
+VOID
+FreeItem(
+    IN PVOID Item)
+{
+    ExFreePool(Item);
+}
 
 
 VOID
@@ -58,7 +77,7 @@ SysAudio_Shutdown(
         RtlFreeUnicodeString(&DeviceEntry->DeviceName);
 
         /* free audio device entry */
-        ExFreePool(DeviceEntry);
+        FreeItem(DeviceEntry);
     }
 
     Irp->IoStatus.Information = 0;
index 36ce635..eb5ee61 100644 (file)
@@ -149,7 +149,7 @@ Pin_fnClose(
         ZwClose(Context->hMixerPin);
     }
 
-    ExFreePool(Context);
+    FreeItem(Context);
 
     Irp->IoStatus.Status = STATUS_SUCCESS;
     Irp->IoStatus.Information = 0;
@@ -315,7 +315,7 @@ InstantiatePins(
         /* the audio irp pin didnt accept the input format
          * let's compute a compatible format
          */
-        MixerPinConnect = ExAllocatePool(NonPagedPool, sizeof(KSPIN_CONNECT) + sizeof(KSDATAFORMAT_WAVEFORMATEX));
+        MixerPinConnect = AllocateItem(NonPagedPool, sizeof(KSPIN_CONNECT) + sizeof(KSDATAFORMAT_WAVEFORMATEX));
         if (!MixerPinConnect)
         {
             /* not enough memory */
@@ -335,7 +335,7 @@ InstantiatePins(
         if (!NT_SUCCESS(Status))
         {
             DPRINT1("ComputeCompatibleFormat failed with %x\n", Status);
-            ExFreePool(MixerPinConnect);
+            FreeItem(MixerPinConnect);
             return Status;
         }
 
@@ -348,7 +348,7 @@ InstantiatePins(
             DPRINT1(" InputFormat: SampleRate %u Bits %u Channels %u\n", InputFormat->WaveFormatEx.nSamplesPerSec, InputFormat->WaveFormatEx.wBitsPerSample, InputFormat->WaveFormatEx.nChannels);
             DPRINT1("OutputFormat: SampleRate %u Bits %u Channels %u\n", OutputFormat->WaveFormatEx.nSamplesPerSec, OutputFormat->WaveFormatEx.wBitsPerSample, OutputFormat->WaveFormatEx.nChannels);
 
-            ExFreePool(MixerPinConnect);
+            FreeItem(MixerPinConnect);
             return Status;
         }
     }
@@ -378,7 +378,7 @@ InstantiatePins(
         if (!NT_SUCCESS(Status))
         {
             DPRINT1("Failed to create Mixer Pin with %x\n", Status);
-            ExFreePool(MixerPinConnect);
+            FreeItem(MixerPinConnect);
         }
     }
     /* done */
@@ -408,7 +408,7 @@ GetConnectRequest(
     ParametersLength = IoStack->FileObject->FileName.MaximumLength - ObjectLength;
 
     /* allocate buffer */
-    Buffer = ExAllocatePool(NonPagedPool, ParametersLength);
+    Buffer = AllocateItem(NonPagedPool, ParametersLength);
     if (!Buffer)
         return STATUS_INSUFFICIENT_RESOURCES;
 
@@ -471,7 +471,7 @@ DispatchCreateSysAudioPin(
 
 
     /* allocate dispatch context */
-    DispatchContext = ExAllocatePool(NonPagedPool, sizeof(DISPATCH_CONTEXT));
+    DispatchContext = AllocateItem(NonPagedPool, sizeof(DISPATCH_CONTEXT));
     if (!DispatchContext)
     {
         /* failed */
@@ -488,7 +488,7 @@ DispatchCreateSysAudioPin(
     if (!NT_SUCCESS(Status))
     {
         /* failed */
-        ExFreePool(DispatchContext);
+        FreeItem(DispatchContext);
         Irp->IoStatus.Status = Status;
         IoCompleteRequest(Irp, IO_NO_INCREMENT);
         return Status;
@@ -500,7 +500,7 @@ DispatchCreateSysAudioPin(
     {
         /* failed */
         KsFreeObjectHeader(DispatchContext->ObjectHeader);
-        ExFreePool(DispatchContext);
+        FreeItem(DispatchContext);
     }
     else
     {
index e5c1120..bd8aea3 100644 (file)
@@ -116,3 +116,13 @@ ComputeCompatibleFormat(
     IN ULONG PinId,
     IN PKSDATAFORMAT_WAVEFORMATEX ClientFormat,
     OUT PKSDATAFORMAT_WAVEFORMATEX MixerFormat);
+
+PVOID
+AllocateItem(
+    IN POOL_TYPE PoolType,
+    IN SIZE_T NumberOfBytes);
+
+VOID
+FreeItem(
+    IN PVOID Item);
+