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