diff --git a/src/sys/cleanup.c b/src/sys/cleanup.c index 6ab177a1..1808a895 100644 --- a/src/sys/cleanup.c +++ b/src/sys/cleanup.c @@ -87,6 +87,9 @@ static NTSTATUS FspFsvolCleanup( FsvolDeviceExtension->NotifySync, &FsvolDeviceExtension->NotifyList, FileDesc); } + /* remove any locks for this file object */ + FspFileNodeUnlockAll(FileNode, FileObject, IoGetRequestorProcess(Irp)); + /* create the user-mode file system request; MustSucceed because IRP_MJ_CLEANUP cannot fail */ FspIopCreateRequestMustSucceedEx(Irp, DeletePending ? &FileNode->FileName : 0, 0, FspFsvolCleanupRequestFini, &Request); diff --git a/src/sys/driver.h b/src/sys/driver.h index e9ae2c2c..9dd6f430 100644 --- a/src/sys/driver.h +++ b/src/sys/driver.h @@ -967,6 +967,7 @@ NTSTATUS FspFileDescResetDirectoryPattern(FSP_FILE_DESC *FileDesc, #define FspFileNodeReleaseOwner(N,F,P) FspFileNodeReleaseOwnerF(N, FspFileNodeAcquire ## F, P) #define FspFileNodeDereferenceSecurity(P) FspMetaCacheDereferenceItemBuffer(P) #define FspFileNodeDereferenceDirInfo(P) FspMetaCacheDereferenceItemBuffer(P) +#define FspFileNodeUnlockAll(N,F,P) FsRtlFastUnlockAll(&(N)->FileLock, F, P, N) /* debug */ #if DBG