Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/*++
Copyright (c) 1996 Microsoft Corporation
Module Name:
timer.c
Abstract:
Cluster FM callback routines to be invoked on a timer
Author:
Sunita shrivastava (sunitas) 24-Sep-1998
Revision History:
--*/
#include "fmp.h"
#include "ntrtl.h"
#define LOG_MODULE TIMER
/****
@func DWORD | FmpQueueTimerActivity| This is invoked by gum when fm requests a vote for a given context.
@parm IN DWORD | dwInterval| The time in msec to wait.
@parm IN PFN_TIMER_CALLBACK | pfnTimerCb | The callback funtion to be invoked when the given time elapses.
@parm IN PVOID | pContext| A pointer to a context structure that is passed back to the callback function. @comm It is assumed that FM wants to use one shot timers.
@rdesc Returns a result code. ERROR_SUCCESS on success.
@xref <f AddTimerActivity> ****/
DWORD FmpQueueTimerActivity( IN DWORD dwInterval, IN PFN_TIMER_CALLBACK pfnTimerCb, IN PVOID pContext ) { HANDLE hTimer = NULL; DWORD dwStatus; hTimer = CreateWaitableTimer(NULL, FALSE, NULL);
if (!hTimer) { dwStatus = GetLastError(); CL_LOGFAILURE(dwStatus); goto FnExit; }
//register the timer for this log with the activity timer thread
dwStatus = AddTimerActivity(hTimer, dwInterval, 0, pfnTimerCb, pContext);
if (dwStatus != ERROR_SUCCESS) { CloseHandle(hTimer); goto FnExit; }
FnExit: return(dwStatus);
} // FmpQueueTimerActivity
/****
@func DWORD | FmpReslistOnlineRetryCb| This is invoked by timer activity thread to bring a resource list online again.
@parm IN VOID | pContext| a pointer to PFM_RESLIST_ONLINE_RETRY_INFO structure containing information about the group and resources to bring online. @comm We dont do the work here since the timer lock is held and we want to avoid acquiring the group lock while the timer lock is held.
@rdesc Returns a result code. ERROR_SUCCESS on success.
@xref <f FmpWorkerThread> <f FmpOnlineResourceList> ****/
void WINAPI FmpReslistOnlineRetryCb( IN HANDLE hTimer, IN PVOID pContext ) { ClRtlLogPrint(LOG_NOISE, "[FM] FmpResListOnlineRetryCb: Called to retry bringing the group online\r\n");
//post a work item, since we dont wont to acquire group locks
//while the timer lock is acquired
//pass hTimer as second Context value to be used by RemoveTimerActivity
FmpPostWorkItem(FM_EVENT_INTERNAL_RETRY_ONLINE, pContext, (ULONG_PTR)hTimer); return; }
|