[ros-diffs] [janderwald] 40832: - When acquiring a mapping check if the mapping hasn't already been used - Set tag value to zero when releasing a mapping

janderwald at svn.reactos.org janderwald at svn.reactos.org
Fri May 8 01:33:28 CEST 2009


Author: janderwald
Date: Fri May  8 03:33:27 2009
New Revision: 40832

URL: http://svn.reactos.org/svn/reactos?rev=40832&view=rev
Log:
- When acquiring a mapping check if the mapping hasn't already been used
- Set tag value to zero when releasing a mapping

Modified:
    trunk/reactos/drivers/wdm/audio/backpln/portcls/irpstream.c

Modified: trunk/reactos/drivers/wdm/audio/backpln/portcls/irpstream.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/wdm/audio/backpln/portcls/irpstream.c?rev=40832&r1=40831&r2=40832&view=diff
==============================================================================
--- trunk/reactos/drivers/wdm/audio/backpln/portcls/irpstream.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/wdm/audio/backpln/portcls/irpstream.c [iso-8859-1] Fri May  8 03:33:27 2009
@@ -142,7 +142,6 @@
     IN PIRP Irp)
 {
     PIRP_MAPPING Mapping;
-    ULONG Index;
     IIrpQueueImpl * This = (IIrpQueueImpl*)iface;
 
     Mapping = AllocateItem(NonPagedPool, sizeof(IRP_MAPPING), TAG_PORTCLASS);
@@ -183,8 +182,7 @@
         return STATUS_UNSUCCESSFUL;
     }
     ASSERT(Mapping->NumTags < 32);
-    for(Index = 0; Index < Mapping->NumTags; Index++);
-        Mapping->References |= (1 << Index);
+    Mapping->References = (1 << Mapping->NumTags) - 1;
 
     This->NumDataAvailable += Mapping->Header->DataUsed;
 
@@ -392,6 +390,7 @@
     PIRP_MAPPING CurMapping;
     PLIST_ENTRY CurEntry;
     ULONG Index;
+    ULONG Value;
     IIrpQueueImpl * This = (IIrpQueueImpl*)iface;
 
     *Flags = 0;
@@ -413,7 +412,8 @@
         CurMapping = CONTAINING_RECORD(CurEntry, IRP_MAPPING, Entry);
         for(Index = 0; Index < CurMapping->NumTags; Index++)
         {
-            if (CurMapping->Tag[Index] == NULL)
+            Value = CurMapping->References & ( 1 << Index);
+            if (CurMapping->Tag[Index] == NULL && Value)
             {
                 /* found a free mapping within audio irp */
                 GetMapping(This, Index, Tag, CurMapping, PhysicalAddress, VirtualAddress, ByteCount, Flags);
@@ -460,6 +460,7 @@
             if (CurMapping->Tag[Index] == Tag)
             {
                 Found = TRUE;
+                CurMapping->Tag[Index] = NULL;
                 break;
             }
         }



More information about the Ros-diffs mailing list