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

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]timeoutTimeout.
[in]typeTimeout 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]timerValid timer thread pointer.
[in]job.
[in]persistent.
[in]eventTimeThe absoule time of the event in seconds from Jan, 1970.
[in]idId 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]timerValid timer thread pointer.
[in]eventMust 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]timerValid timer thread pointer.
[in]tpValid 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]timerValid timer thread pointer.
[in]idId of event to remove.
[in]outSpace 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]timerValid timer thread pointer.
[in]timeouttime of event. Either in absolute seconds, or relative seconds in the future.
[in]typeeither ABS_SEC, or REL_SEC. If REL_SEC, then the event will be scheduled at the current time + REL_SEC.
[in]jobValid Thread pool job with following fields.
[in]duration.
[in]idId 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]timerValid 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]argarg is cast to (TimerThread *).

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

Referenced by TimerThreadInit().