mirror of
				https://github.com/winfsp/winfsp.git
				synced 2025-10-30 19:48:38 -05:00 
			
		
		
		
	sys: FspVolumeTransact(): do not retry IRP completions immediately
This commit is contained in:
		| @@ -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! */ | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user