https://git.reactos.org/?p=reactos.git;a=commitdiff;h=a5e89014dc943b2cbddb16fc4d92e13b7e5068e1

commit a5e89014dc943b2cbddb16fc4d92e13b7e5068e1
Author:     Pierre Schweitzer <pie...@reactos.org>
AuthorDate: Mon Feb 12 20:45:12 2018 +0100
Commit:     Pierre Schweitzer <pie...@reactos.org>
CommitDate: Mon Feb 12 20:47:32 2018 +0100

    [CDFS_NEW] Fix a bug in Microsoft CDFS implementation where the top level 
IRP
    is set before locking is actually attempted for Cc worker thread (lazy 
write/read ahead).
    So in case locking fails, the top level IRP is set and never unset, and 
latter
    call will hit the assert where it expects the top level IRP to be NULL.
    
    Should be reported upstream (tm).
    
    CORE-14315
---
 drivers/filesystems/cdfs_new/resrcsup.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/drivers/filesystems/cdfs_new/resrcsup.c 
b/drivers/filesystems/cdfs_new/resrcsup.c
index c9eaa7be26..3bb38bb529 100755
--- a/drivers/filesystems/cdfs_new/resrcsup.c
+++ b/drivers/filesystems/cdfs_new/resrcsup.c
@@ -164,10 +164,20 @@ Return Value:
 {
     PAGED_CODE();
 
+#ifdef __REACTOS__
+    if (!ExAcquireResourceSharedLite( Fcb->Resource, Wait )) {
+        return FALSE;
+    }
+#endif
+
     NT_ASSERT(IoGetTopLevelIrp() == NULL);
     IoSetTopLevelIrp((PIRP)FSRTL_CACHE_TOP_LEVEL_IRP);
 
+#ifndef __REACTOS__
     return ExAcquireResourceSharedLite( Fcb->Resource, Wait );
+#else
+    return TRUE;
+#endif
 }
 
 

Reply via email to