mirror of
https://github.com/winfsp/winfsp.git
synced 2025-04-24 01:13:04 -05:00
sys: FspVolumeTransact(): do not retry IRP completions immediately
This commit is contained in:
parent
acf1b453fc
commit
f491d6015f
@ -521,6 +521,7 @@ NTSTATUS FspVolumeTransact(
|
|||||||
LARGE_INTEGER Timeout;
|
LARGE_INTEGER Timeout;
|
||||||
|
|
||||||
/* process any user-mode file system responses */
|
/* process any user-mode file system responses */
|
||||||
|
RepostedIrp = 0;
|
||||||
Response = SystemBuffer;
|
Response = SystemBuffer;
|
||||||
BufferEnd = (PUINT8)SystemBuffer + InputBufferLength;
|
BufferEnd = (PUINT8)SystemBuffer + InputBufferLength;
|
||||||
for (;;)
|
for (;;)
|
||||||
@ -534,13 +535,21 @@ NTSTATUS FspVolumeTransact(
|
|||||||
/* either IRP was canceled or a bogus Hint was provided */
|
/* either IRP was canceled or a bogus Hint was provided */
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
FspIopDispatchComplete(ProcessIrp, Response);
|
Result = FspIopDispatchComplete(ProcessIrp, Response);
|
||||||
|
if (STATUS_PENDING == Result)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* The IRP has been reposted to our Ioq. Remember the first such IRP,
|
||||||
|
* so that we know to break the loop if we see it again.
|
||||||
|
*/
|
||||||
|
if (0 == RepostedIrp)
|
||||||
|
RepostedIrp = ProcessIrp;
|
||||||
|
}
|
||||||
|
|
||||||
Response = NextResponse;
|
Response = NextResponse;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* process any retried IRP's */
|
/* process any retried IRP's */
|
||||||
RepostedIrp = 0;
|
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
/* get the next retried IRP, but do not go beyond the first reposted IRP! */
|
/* get the next retried IRP, but do not go beyond the first reposted IRP! */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user