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 TimerEvent * | CreateTimerEvent (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.

## Function Documentation

## CalculateEventTime()

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.

References ABS_SEC.

Referenced by TimerThreadSchedule().

## CreateTimerEvent()

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().

## FreeTimerEvent()

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().

## TimerThreadInit()

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 ThreadPoolAddPersistent(), TimerThreadWorker(), TPJobInit(), and TPJobSetPriority().

Referenced by UpnpInitPreamble().

## TimerThreadRemove()

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().

## TimerThreadSchedule()

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(), SearchByTarget(), ssdp_handle_device_request(), and UpnpSendAdvertisementLowPower().

## TimerThreadShutdown()

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().

## TimerThreadWorker()

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(), TIMEREVENT::persistent, LINKEDLIST::size, ThreadPoolAdd(), and ThreadPoolAddPersistent().

Referenced by TimerThreadInit().