mirror of
				https://github.com/winfsp/winfsp.git
				synced 2025-10-29 19:18:39 -05:00 
			
		
		
		
	sys: remove wait group (Wgroup) functionality
This commit is contained in:
		| @@ -686,28 +686,6 @@ VOID FspIrpHookReset(PIRP Irp); | ||||
| PVOID FspIrpHookContext(PVOID Context); | ||||
| NTSTATUS FspIrpHookNext(PDEVICE_OBJECT DeviceObject, PIRP Irp, PVOID Context); | ||||
|  | ||||
| /* utility: wait groups | ||||
|  * | ||||
|  * A Wait Group is a synchronization primitive that encapsulates a counter. | ||||
|  * A Wait Group is considered signaled when the counter is 0 and non-signaled | ||||
|  * when the counter is non-0. (Wait Group functionality is similar to Golang's | ||||
|  * sync.WaitGroup.) | ||||
|  * | ||||
|  * Wait Groups must always be allocated in non-paged storage. | ||||
|  */ | ||||
| typedef struct | ||||
| { | ||||
|     KEVENT Event; | ||||
|     LONG Count; | ||||
|     KSPIN_LOCK SpinLock; | ||||
| } FSP_WGROUP; | ||||
| VOID FspWgroupInitialize(FSP_WGROUP *Wgroup); | ||||
| VOID FspWgroupIncrement(FSP_WGROUP *Wgroup); | ||||
| VOID FspWgroupDecrement(FSP_WGROUP *Wgroup); | ||||
| VOID FspWgroupSignalPermanently(FSP_WGROUP *Wgroup); | ||||
| NTSTATUS FspWgroupWait(FSP_WGROUP *Wgroup, | ||||
|     KPROCESSOR_MODE WaitMode, BOOLEAN Alertable, PLARGE_INTEGER PTimeout); | ||||
|  | ||||
| /* silos */ | ||||
| typedef struct | ||||
| { | ||||
|   | ||||
| @@ -131,12 +131,6 @@ NTSTATUS FspIrpHook(PIRP Irp, PIO_COMPLETION_ROUTINE CompletionRoutine, PVOID Ow | ||||
| VOID FspIrpHookReset(PIRP Irp); | ||||
| PVOID FspIrpHookContext(PVOID Context); | ||||
| NTSTATUS FspIrpHookNext(PDEVICE_OBJECT DeviceObject, PIRP Irp, PVOID Context); | ||||
| VOID FspWgroupInitialize(FSP_WGROUP *Wgroup); | ||||
| VOID FspWgroupIncrement(FSP_WGROUP *Wgroup); | ||||
| VOID FspWgroupDecrement(FSP_WGROUP *Wgroup); | ||||
| VOID FspWgroupSignalPermanently(FSP_WGROUP *Wgroup); | ||||
| NTSTATUS FspWgroupWait(FSP_WGROUP *Wgroup, | ||||
|     KPROCESSOR_MODE WaitMode, BOOLEAN Alertable, PLARGE_INTEGER PTimeout); | ||||
|  | ||||
| #ifdef ALLOC_PRAGMA | ||||
| #pragma alloc_text(PAGE, FspIsNtDdiVersionAvailable) | ||||
| @@ -180,13 +174,6 @@ NTSTATUS FspWgroupWait(FSP_WGROUP *Wgroup, | ||||
| #pragma alloc_text(PAGE, FspSafeMdlDelete) | ||||
| #pragma alloc_text(PAGE, FspIrpHook) | ||||
| #pragma alloc_text(PAGE, FspIrpHookReset) | ||||
| // !#pragma alloc_text(PAGE, FspIrpHookContext) | ||||
| // !#pragma alloc_text(PAGE, FspIrpHookNext) | ||||
| // !#pragma alloc_text(PAGE, FspWgroupInitialize) | ||||
| // !#pragma alloc_text(PAGE, FspWgroupIncrement) | ||||
| // !#pragma alloc_text(PAGE, FspWgroupDecrement) | ||||
| // !#pragma alloc_text(PAGE, FspWgroupSignalPermanently) | ||||
| // !#pragma alloc_text(PAGE, FspWgroupWait) | ||||
| #endif | ||||
|  | ||||
| static const LONG Delays[] = | ||||
| @@ -1506,56 +1493,3 @@ NTSTATUS FspIrpHookNext(PDEVICE_OBJECT DeviceObject, PIRP Irp, PVOID Context) | ||||
|  | ||||
|     return Result; | ||||
| } | ||||
|  | ||||
| VOID FspWgroupInitialize(FSP_WGROUP *Wgroup) | ||||
| { | ||||
|     // !PAGED_CODE(); | ||||
|  | ||||
|     KeInitializeEvent(&Wgroup->Event, NotificationEvent, TRUE); | ||||
|     Wgroup->Count = 0; | ||||
|     KeInitializeSpinLock(&Wgroup->SpinLock); | ||||
| } | ||||
|  | ||||
| VOID FspWgroupIncrement(FSP_WGROUP *Wgroup) | ||||
| { | ||||
|     // !PAGED_CODE(); | ||||
|  | ||||
|     KIRQL Irql; | ||||
|  | ||||
|     KeAcquireSpinLock(&Wgroup->SpinLock, &Irql); | ||||
|     if (0 <= Wgroup->Count && 1 == ++Wgroup->Count) | ||||
|         KeClearEvent(&Wgroup->Event); | ||||
|     KeReleaseSpinLock(&Wgroup->SpinLock, Irql); | ||||
| } | ||||
|  | ||||
| VOID FspWgroupDecrement(FSP_WGROUP *Wgroup) | ||||
| { | ||||
|     // !PAGED_CODE(); | ||||
|  | ||||
|     KIRQL Irql; | ||||
|  | ||||
|     KeAcquireSpinLock(&Wgroup->SpinLock, &Irql); | ||||
|     if (0 < Wgroup->Count && 0 == --Wgroup->Count) | ||||
|         KeSetEvent(&Wgroup->Event, 1, FALSE); | ||||
|     KeReleaseSpinLock(&Wgroup->SpinLock, Irql); | ||||
| } | ||||
|  | ||||
| VOID FspWgroupSignalPermanently(FSP_WGROUP *Wgroup) | ||||
| { | ||||
|     // !PAGED_CODE(); | ||||
|  | ||||
|     KIRQL Irql; | ||||
|  | ||||
|     KeAcquireSpinLock(&Wgroup->SpinLock, &Irql); | ||||
|     Wgroup->Count = -1; | ||||
|     KeSetEvent(&Wgroup->Event, 1, FALSE); | ||||
|     KeReleaseSpinLock(&Wgroup->SpinLock, Irql); | ||||
| } | ||||
|  | ||||
| NTSTATUS FspWgroupWait(FSP_WGROUP *Wgroup, | ||||
|     KPROCESSOR_MODE WaitMode, BOOLEAN Alertable, PLARGE_INTEGER PTimeout) | ||||
| { | ||||
|     // !PAGED_CODE(); | ||||
|  | ||||
|     return KeWaitForSingleObject(&Wgroup->Event, Executive, WaitMode, Alertable, PTimeout); | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user