103 lines
2 KiB
C
103 lines
2 KiB
C
/*
|
||
|
||
Copyright (c) 1992 Microsoft Corporation
|
||
|
||
Module Name:
|
||
|
||
scavengr.h
|
||
|
||
Abstract:
|
||
|
||
This file defines the scavenger thread interface.
|
||
|
||
Author:
|
||
|
||
Jameel Hyder (microsoft!jameelh)
|
||
|
||
|
||
Revision History:
|
||
25 Jun 1992 Initial Version
|
||
|
||
Notes: Tab stop: 4
|
||
--*/
|
||
|
||
#ifndef _SCAVENGER_
|
||
#define _SCAVENGER_
|
||
|
||
typedef AFPSTATUS (FASTCALL *SCAVENGER_ROUTINE)(IN PVOID Parameter);
|
||
|
||
extern
|
||
NTSTATUS
|
||
AfpScavengerInit(
|
||
VOID
|
||
);
|
||
|
||
extern
|
||
VOID
|
||
AfpScavengerDeInit(
|
||
VOID
|
||
);
|
||
|
||
extern
|
||
NTSTATUS
|
||
AfpScavengerScheduleEvent(
|
||
IN SCAVENGER_ROUTINE Worker, // Routine to invoke when time expires
|
||
IN PVOID pContext, // Context to pass to the routine
|
||
IN LONG DeltaTime, // Schedule after this much time
|
||
IN BOOLEAN fQueue // If TRUE, then worker must be queued
|
||
);
|
||
|
||
extern
|
||
BOOLEAN
|
||
AfpScavengerKillEvent(
|
||
IN SCAVENGER_ROUTINE Worker, // Routine that was scheduled
|
||
IN PVOID pContext // Context
|
||
);
|
||
|
||
extern
|
||
VOID
|
||
AfpScavengerFlushAndStop(
|
||
VOID
|
||
);
|
||
|
||
#ifdef _SCAVENGER_LOCALS
|
||
|
||
// Keep this at a ONE second level. Most clients should be using close to
|
||
// 10 ticks or so.
|
||
#define AFP_SCAVENGER_TIMER_TICK -1*NUM_100ns_PER_SECOND
|
||
|
||
typedef struct _ScavengerList
|
||
{
|
||
struct _ScavengerList * scvgr_Next; // Link to next
|
||
LONG scvgr_AbsTime; // Absolute time
|
||
LONG scvgr_RelDelta; // Relative to the previous entry
|
||
BOOLEAN scvgr_fQueue; // If TRUE, should always be queued
|
||
SCAVENGER_ROUTINE scvgr_Worker; // Real Worker
|
||
PVOID scvgr_Context; // Real context
|
||
WORK_ITEM scvgr_WorkItem; // Used for queueing to worker thread
|
||
} SCAVENGERLIST, *PSCAVENGERLIST;
|
||
|
||
LOCAL KTIMER afpScavengerTimer = { 0 };
|
||
LOCAL KDPC afpScavengerDpc = { 0 };
|
||
LOCAL BOOLEAN afpScavengerStopped = False;
|
||
LOCAL PSCAVENGERLIST afpScavengerList = NULL;
|
||
LOCAL AFP_SPIN_LOCK afpScavengerLock = { 0 };
|
||
|
||
LOCAL VOID
|
||
afpScavengerDpcRoutine(
|
||
IN PKDPC pKDpc,
|
||
IN PVOID pContext,
|
||
IN PVOID SystemArgument1,
|
||
IN PVOID SystemArgument2
|
||
);
|
||
|
||
LOCAL VOID FASTCALL
|
||
afpScavengerWorker(
|
||
IN PSCAVENGERLIST pList
|
||
);
|
||
|
||
#endif // _SCAVENGER_LOCALS
|
||
|
||
#endif // _SCAVENGER_
|
||
|
||
|