From 68d5450c51388ba2ad1c9d22bcd4e584999728c2 Mon Sep 17 00:00:00 2001 From: Hartmut Birr Date: Wed, 2 Oct 2002 19:22:06 +0000 Subject: [PATCH] Release the BcbLock before there is a call to CcRosFreeCacheSegment (in CcSetFileSizes). svn path=/trunk/; revision=3597 --- reactos/ntoskrnl/cc/misc.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/reactos/ntoskrnl/cc/misc.c b/reactos/ntoskrnl/cc/misc.c index 40ce9d967c4..18bf9cffc12 100644 --- a/reactos/ntoskrnl/cc/misc.c +++ b/reactos/ntoskrnl/cc/misc.c @@ -89,15 +89,18 @@ CcSetFileSizes (IN PFILE_OBJECT FileObject, { current_entry = Bcb->BcbSegmentListHead.Flink; while (current_entry != &Bcb->BcbSegmentListHead) - { - current = CONTAINING_RECORD(current_entry, CACHE_SEGMENT, - BcbSegmentListEntry); - current_entry = current_entry->Flink; - if (current->FileOffset > FileSizes->AllocationSize.QuadPart) - { - CcRosFreeCacheSegment(Bcb, current); - } - } + { + current = CONTAINING_RECORD(current_entry, CACHE_SEGMENT, + BcbSegmentListEntry); + current_entry = current_entry->Flink; + if (current->FileOffset > FileSizes->AllocationSize.QuadPart) + { + KeReleaseSpinLock(&Bcb->BcbLock, oldirql); + CcRosFreeCacheSegment(Bcb, current); + KeAcquireSpinLock(&Bcb->BcbLock, &oldirql); + current_entry = Bcb->BcbSegmentListHead.Flink; + } + } } Bcb->AllocationSize = FileSizes->AllocationSize; Bcb->FileSize = FileSizes->FileSize;