mirror of
https://github.com/winfsp/winfsp.git
synced 2025-04-22 16:33:02 -05:00
sys: remove wait group (Wgroup) functionality
This commit is contained in:
parent
a3b98634de
commit
04c2f0120c
@ -686,28 +686,6 @@ VOID FspIrpHookReset(PIRP Irp);
|
|||||||
PVOID FspIrpHookContext(PVOID Context);
|
PVOID FspIrpHookContext(PVOID Context);
|
||||||
NTSTATUS FspIrpHookNext(PDEVICE_OBJECT DeviceObject, PIRP Irp, 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 */
|
/* silos */
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
|
@ -131,12 +131,6 @@ NTSTATUS FspIrpHook(PIRP Irp, PIO_COMPLETION_ROUTINE CompletionRoutine, PVOID Ow
|
|||||||
VOID FspIrpHookReset(PIRP Irp);
|
VOID FspIrpHookReset(PIRP Irp);
|
||||||
PVOID FspIrpHookContext(PVOID Context);
|
PVOID FspIrpHookContext(PVOID Context);
|
||||||
NTSTATUS FspIrpHookNext(PDEVICE_OBJECT DeviceObject, PIRP Irp, 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
|
#ifdef ALLOC_PRAGMA
|
||||||
#pragma alloc_text(PAGE, FspIsNtDdiVersionAvailable)
|
#pragma alloc_text(PAGE, FspIsNtDdiVersionAvailable)
|
||||||
@ -180,13 +174,6 @@ NTSTATUS FspWgroupWait(FSP_WGROUP *Wgroup,
|
|||||||
#pragma alloc_text(PAGE, FspSafeMdlDelete)
|
#pragma alloc_text(PAGE, FspSafeMdlDelete)
|
||||||
#pragma alloc_text(PAGE, FspIrpHook)
|
#pragma alloc_text(PAGE, FspIrpHook)
|
||||||
#pragma alloc_text(PAGE, FspIrpHookReset)
|
#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
|
#endif
|
||||||
|
|
||||||
static const LONG Delays[] =
|
static const LONG Delays[] =
|
||||||
@ -1506,56 +1493,3 @@ NTSTATUS FspIrpHookNext(PDEVICE_OBJECT DeviceObject, PIRP Irp, PVOID Context)
|
|||||||
|
|
||||||
return Result;
|
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);
|
|
||||||
}
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user