https://git.reactos.org/?p=reactos.git;a=commitdiff;h=cf25432eedcd6c071912c…
commit cf25432eedcd6c071912c54e55f219104faf83f1
Author: Pierre Schweitzer <pierre(a)reactos.org>
AuthorDate: Sat Sep 29 16:21:44 2018 +0200
Commit: Pierre Schweitzer <pierre(a)reactos.org>
CommitDate: Sat Sep 29 16:25:58 2018 +0200
[NTOSKRNL] Don't lock file object on close if we're not called by Ob
IopCloseFile can be called by IopDeleteFile. In that situation, it
doesn't set any process as first parameter. Furthermore, we are in a
situation where it's not required to lock the file object (see the
assert before the call).
---
ntoskrnl/io/iomgr/file.c | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/ntoskrnl/io/iomgr/file.c b/ntoskrnl/io/iomgr/file.c
index e7633a331f..c10729080d 100644
--- a/ntoskrnl/io/iomgr/file.c
+++ b/ntoskrnl/io/iomgr/file.c
@@ -2033,7 +2033,11 @@ IopCloseFile(IN PEPROCESS Process OPTIONAL,
FileObject->Flags |= FO_HANDLE_CREATED;
/* Check if this is a sync FO and lock it */
- if (FileObject->Flags & FO_SYNCHRONOUS_IO) IopLockFileObject(FileObject);
+ if (Process != NULL &&
+ BooleanFlagOn(FileObject->Flags, FO_SYNCHRONOUS_IO))
+ {
+ IopLockFileObject(FileObject);
+ }
/* Clear and set up Events */
KeClearEvent(&FileObject->Event);
@@ -2078,7 +2082,11 @@ IopCloseFile(IN PEPROCESS Process OPTIONAL,
IoFreeIrp(Irp);
/* Release the lock if we were holding it */
- if (FileObject->Flags & FO_SYNCHRONOUS_IO) IopUnlockFileObject(FileObject);
+ if (Process != NULL &&
+ BooleanFlagOn(FileObject->Flags, FO_SYNCHRONOUS_IO))
+ {
+ IopUnlockFileObject(FileObject);
+ }
}
NTSTATUS