mirror of
https://github.com/reactos/reactos.git
synced 2025-02-24 09:25:10 +00:00
[USBEHCI] [USBOHCI]
- Don't corrupt memory when a queue head / transfer descriptor is freed - How did this work before... svn path=/branches/usb-bringup-trunk/; revision=55525
This commit is contained in:
parent
147eeaf010
commit
6c4befe209
2 changed files with 26 additions and 4 deletions
|
@ -271,7 +271,7 @@ CDMAMemoryManager::Release(
|
|||
IN ULONG Size)
|
||||
{
|
||||
KIRQL OldLevel;
|
||||
ULONG BlockOffset = 0, BlockLength;
|
||||
ULONG BlockOffset = 0, BlockLength, BlockCount;
|
||||
|
||||
//
|
||||
// sanity checks
|
||||
|
@ -301,15 +301,26 @@ CDMAMemoryManager::Release(
|
|||
//
|
||||
Size = (Size + m_BlockSize - 1) & ~(m_BlockSize - 1);
|
||||
|
||||
//
|
||||
// convert to blocks
|
||||
//
|
||||
BlockCount = Size / m_BlockSize;
|
||||
ASSERT(BlockCount);
|
||||
|
||||
//
|
||||
// acquire lock
|
||||
//
|
||||
KeAcquireSpinLock(m_Lock, &OldLevel);
|
||||
|
||||
//
|
||||
// sanity check
|
||||
//
|
||||
ASSERT(RtlAreBitsSet(&m_Bitmap, BlockOffset, BlockCount));
|
||||
|
||||
//
|
||||
// release buffer
|
||||
//
|
||||
RtlClearBits(&m_Bitmap, BlockOffset, Size);
|
||||
RtlClearBits(&m_Bitmap, BlockOffset, BlockCount);
|
||||
|
||||
//
|
||||
// release lock
|
||||
|
|
|
@ -271,7 +271,7 @@ CDMAMemoryManager::Release(
|
|||
IN ULONG Size)
|
||||
{
|
||||
KIRQL OldLevel;
|
||||
ULONG BlockOffset = 0, BlockLength;
|
||||
ULONG BlockOffset = 0, BlockLength, BlockCount;
|
||||
|
||||
//
|
||||
// sanity checks
|
||||
|
@ -301,15 +301,26 @@ CDMAMemoryManager::Release(
|
|||
//
|
||||
Size = (Size + m_BlockSize - 1) & ~(m_BlockSize - 1);
|
||||
|
||||
//
|
||||
// convert to blocks
|
||||
//
|
||||
BlockCount = Size / m_BlockSize;
|
||||
ASSERT(BlockCount);
|
||||
|
||||
//
|
||||
// acquire lock
|
||||
//
|
||||
KeAcquireSpinLock(m_Lock, &OldLevel);
|
||||
|
||||
//
|
||||
// sanity check
|
||||
//
|
||||
ASSERT(RtlAreBitsSet(&m_Bitmap, BlockOffset, BlockCount));
|
||||
|
||||
//
|
||||
// release buffer
|
||||
//
|
||||
RtlClearBits(&m_Bitmap, BlockOffset, Size);
|
||||
RtlClearBits(&m_Bitmap, BlockOffset, BlockCount);
|
||||
|
||||
//
|
||||
// release lock
|
||||
|
|
Loading…
Reference in a new issue