Functions

TimerThread.c File Reference

#include "TimerThread.h"
#include <assert.h>
Include dependency graph for TimerThread.c:

Functions

static void FreeTimerEvent (TimerThread *timer, TimerEvent *event)
 Deallocates a dynamically allocated TimerEvent.
static void * TimerThreadWorker (void *arg)
 Implements timer thread.
static int CalculateEventTime (time_t *timeout, TimeoutType type)
 Calculates the appropriate timeout in absolute seconds since Jan 1, 1970.
static TimerEventCreateTimerEvent (TimerThread *timer, ThreadPoolJob *job, Duration persistent, time_t eventTime, int id)
 Creates a Timer Event. (Dynamically allocated).
int TimerThreadInit (TimerThread *timer, ThreadPool *tp)
 Initializes and starts timer thread.
int TimerThreadSchedule (TimerThread *timer, time_t timeout, TimeoutType type, ThreadPoolJob *job, Duration duration, int *id)
 Schedules an event to run at a specified time.
int TimerThreadRemove (TimerThread *timer, int id, ThreadPoolJob *out)
 Removes an event from the timer Q.
int TimerThreadShutdown (TimerThread *timer)
 Shutdown the timer thread.

Detailed Description


Function Documentation

static int CalculateEventTime ( time_t *  timeout,
TimeoutType  type 
) [static]

Calculates the appropriate timeout in absolute seconds since Jan 1, 1970.

Returns:
Parameters:
[in] timeout Timeout.
[in] type Timeout type.

Referenced by TimerThreadSchedule().

static TimerEvent* CreateTimerEvent ( TimerThread timer,
ThreadPoolJob job,
Duration  persistent,
time_t  eventTime,
int  id 
) [static]

Creates a Timer Event. (Dynamically allocated).

Returns:
(TimerEvent *) on success, NULL on failure.
Parameters:
[in] timer Valid timer thread pointer.
[in] job .
[in] persistent .
[in] eventTime The absoule time of the event in seconds from Jan, 1970.
[in] id Id of job.

References TIMEREVENT::eventTime, and TIMEREVENT::persistent.

Referenced by TimerThreadSchedule().

static void FreeTimerEvent ( TimerThread timer,
TimerEvent event 
) [static]

Deallocates a dynamically allocated TimerEvent.

Parameters:
[in] timer Valid timer thread pointer.
[in] event Must be allocated with CreateTimerEvent

Referenced by TimerThreadRemove(), TimerThreadSchedule(), TimerThreadShutdown(), and TimerThreadWorker().

int TimerThreadInit ( TimerThread timer,
ThreadPool tp 
)

Initializes and starts timer thread.

Returns:
0 on success, nonzero on failure. Returns error from ThreadPoolAddPersistent on failure.
Parameters:
[in] timer Valid timer thread pointer.
[in] tp Valid thread pool to use. Must be started. Must be valid for lifetime of timer. Timer must be shutdown BEFORE thread pool.

References TimerThreadWorker().

Referenced by UpnpInitPreamble().

int TimerThreadRemove ( TimerThread timer,
int  id,
ThreadPoolJob out 
)

Removes an event from the timer Q.

Events can only be removed before they have been placed in the thread pool.

Returns:
0 on success, INVALID_EVENT_ID on failure.
Parameters:
[in] timer Valid timer thread pointer.
[in] id Id of event to remove.
[in] out Space for thread pool job.

References FreeTimerEvent().

Referenced by free_client_subscription(), and genaRenewSubscription().

int TimerThreadSchedule ( TimerThread timer,
time_t  time,
TimeoutType  type,
ThreadPoolJob job,
Duration  duration,
int *  id 
)

Schedules an event to run at a specified time.

Returns:
0 on success, nonzero on failure, EOUTOFMEM if not enough memory to schedule job.
Parameters:
[in] timer Valid timer thread pointer.
[in] timeout time of event. Either in absolute seconds, or relative seconds in the future.
[in] type either ABS_SEC, or REL_SEC. If REL_SEC, then the event will be scheduled at the current time + REL_SEC.
[in] job Valid Thread pool job with following fields.
[in] duration .
[in] id Id of timer event. (out, can be null).

References CalculateEventTime(), CreateTimerEvent(), TIMEREVENT::eventTime, and FreeTimerEvent().

Referenced by ScheduleGenaAutoRenew(), and UpnpSendAdvertisement().

int TimerThreadShutdown ( TimerThread timer  ) 

Shutdown the timer thread.

Events scheduled in the future will NOT be run.

Timer thread should be shutdown BEFORE it's associated thread pool.

Returns:
0 if succesfull, nonzero otherwise. Always returns 0.
Parameters:
[in] timer Valid timer thread pointer.

References FreeTimerEvent().

Referenced by UpnpFinish().

static void* TimerThreadWorker ( void *  arg  )  [static]

Implements timer thread.

Waits for next event to occur and schedules associated job into threadpool.

Parameters:
[in] arg arg is cast to (TimerThread *).

References TIMEREVENT::eventTime, FreeTimerEvent(), and TIMEREVENT::persistent.

Referenced by TimerThreadInit().