#include <config.h>#include <isc/mem.h>#include <isc/ratelimiter.h>#include <isc/task.h>#include <isc/time.h>#include <isc/timer.h>#include <isc/util.h>Go to the source code of this file.
Definition in file ratelimiter.c.
| #define ISC_RATELIMITEREVENT_SHUTDOWN (ISC_EVENTCLASS_RATELIMITER + 1) |
| isc_ratelimiter_stalled | |
| isc_ratelimiter_ratelimited | |
| isc_ratelimiter_idle | |
| isc_ratelimiter_shuttingdown |
Definition at line 31 of file ratelimiter.c.
| static void ratelimiter_tick | ( | isc_task_t * | task, | |
| isc_event_t * | event | |||
| ) | [static] |
Definition at line 194 of file ratelimiter.c.
References INSIST, isc_event_free(), ISC_FALSE, ISC_LIST_HEAD, ISC_LIST_UNLINK, ISC_R_SUCCESS, isc_ratelimiter_idle, isc_task_send(), isc_timer_reset(), isc_timertype_inactive, isc_ratelimiter::lock, LOCK, isc_ratelimiter::pertic, RUNTIME_CHECK, isc_ratelimiter::state, isc_ratelimiter::timer, UNLOCK, and UNUSED.
Referenced by isc_ratelimiter_create().
| static void ratelimiter_shutdowncomplete | ( | isc_task_t * | task, | |
| isc_event_t * | event | |||
| ) | [static] |
Definition at line 265 of file ratelimiter.c.
References isc_ratelimiter_detach(), and UNUSED.
Referenced by isc_ratelimiter_create().
| isc_result_t isc_ratelimiter_create | ( | isc_mem_t * | mctx, | |
| isc_timermgr_t * | timermgr, | |||
| isc_task_t * | task, | |||
| isc_ratelimiter_t ** | ratelimiterp | |||
| ) |
Create a rate limiter. The execution interval is initially undefined.
Definition at line 60 of file ratelimiter.c.
References DESTROYLOCK, INSIST, isc_ratelimiter::interval, ISC_EVENT_INIT, isc_interval_set(), ISC_LIST_INIT, isc_mem_get, isc_mem_put, isc_mutex_init, ISC_R_NOMEMORY, ISC_R_SUCCESS, isc_ratelimiter_idle, ISC_RATELIMITEREVENT_SHUTDOWN, isc_timer_create(), isc_timertype_inactive, isc_ratelimiter::lock, isc_ratelimiter::mctx, isc_ratelimiter::pertic, ratelimiter_shutdowncomplete(), ratelimiter_tick(), isc_ratelimiter::refs, isc_ratelimiter::shutdownevent, isc_ratelimiter::state, isc_ratelimiter::task, and isc_ratelimiter::timer.
Referenced by dns_zonemgr_create().
| isc_result_t isc_ratelimiter_setinterval | ( | isc_ratelimiter_t * | rl, | |
| isc_interval_t * | interval | |||
| ) |
Set the minimum interval between event executions. The interval value is copied, so the caller need not preserve it.
Requires: '*interval' is a nonzero interval.
Definition at line 111 of file ratelimiter.c.
References isc_ratelimiter::interval, ISC_FALSE, ISC_R_SUCCESS, isc_ratelimiter_ratelimited, isc_timer_reset(), isc_timertype_ticker, isc_ratelimiter::lock, LOCK, REQUIRE, isc_ratelimiter::state, isc_ratelimiter::timer, and UNLOCK.
Referenced by setrl().
| void isc_ratelimiter_setpertic | ( | isc_ratelimiter_t * | rl, | |
| isc_uint32_t | pertic | |||
| ) |
Set the number of events processed per interval timer tick. If 'perint' is zero it is treated as 1.
Definition at line 131 of file ratelimiter.c.
References isc_ratelimiter::pertic, and REQUIRE.
Referenced by setrl().
| isc_result_t isc_ratelimiter_enqueue | ( | isc_ratelimiter_t * | rl, | |
| isc_task_t * | task, | |||
| isc_event_t ** | eventp | |||
| ) |
Queue an event for rate-limited execution.
This is similar to doing an isc_task_send() to the 'task', except that the execution may be delayed to achieve the desired rate of execution.
'(*eventp)->ev_sender' is used to hold the task. The caller must ensure that the task exists until the event is delivered.
Requires:
Definition at line 141 of file ratelimiter.c.
References INSIST, isc_ratelimiter::interval, ISC_FALSE, ISC_LIST_APPEND, ISC_R_SHUTTINGDOWN, ISC_R_SUCCESS, isc_ratelimiter_idle, isc_ratelimiter_ratelimited, isc_ratelimiter_shuttingdown, isc_ratelimiter_stalled, isc_task_send(), isc_timer_reset(), isc_timertype_ticker, isc_ratelimiter::lock, LOCK, REQUIRE, isc_ratelimiter::state, isc_ratelimiter::timer, and UNLOCK.
Referenced by notify_isqueued(), notify_send_queue(), and queue_soa_query().
| isc_result_t isc_ratelimiter_dequeue | ( | isc_ratelimiter_t * | rl, | |
| isc_event_t * | event | |||
| ) |
Definition at line 177 of file ratelimiter.c.
References ISC_LINK_LINKED, ISC_LIST_UNLINK, ISC_R_NOTFOUND, ISC_R_SUCCESS, isc_ratelimiter::lock, LOCK, REQUIRE, and UNLOCK.
Referenced by notify_isqueued().
| void isc_ratelimiter_shutdown | ( | isc_ratelimiter_t * | ratelimiter | ) |
Shut down a rate limiter.
Ensures:
Definition at line 236 of file ratelimiter.c.
References ISC_EVENTATTR_CANCELED, ISC_FALSE, ISC_LIST_HEAD, ISC_LIST_UNLINK, isc_ratelimiter_shuttingdown, isc_task_send(), isc_timer_detach(), isc_timer_reset(), isc_timertype_inactive, isc_ratelimiter::lock, LOCK, REQUIRE, isc_ratelimiter::shutdownevent, isc_ratelimiter::state, isc_ratelimiter::task, isc_ratelimiter::timer, and UNLOCK.
Referenced by dns_zonemgr_shutdown().
| static void ratelimiter_free | ( | isc_ratelimiter_t * | rl | ) | [static] |
Definition at line 274 of file ratelimiter.c.
References DESTROYLOCK, isc_mem_put, isc_ratelimiter::lock, and isc_ratelimiter::mctx.
Referenced by isc_ratelimiter_detach().
| void isc_ratelimiter_attach | ( | isc_ratelimiter_t * | source, | |
| isc_ratelimiter_t ** | target | |||
| ) |
Attach to a rate limiter.
Definition at line 280 of file ratelimiter.c.
References INSIST, isc_ratelimiter::lock, LOCK, isc_ratelimiter::refs, REQUIRE, and UNLOCK.
| void isc_ratelimiter_detach | ( | isc_ratelimiter_t ** | rlp | ) |
Detach from a rate limiter.
Definition at line 294 of file ratelimiter.c.
References free_now, ISC_FALSE, ISC_TRUE, isc_ratelimiter::lock, LOCK, ratelimiter_free(), isc_ratelimiter::refs, REQUIRE, and UNLOCK.
Referenced by dns_zonemgr_create(), ratelimiter_shutdowncomplete(), and zonemgr_free().
| isc_result_t isc_ratelimiter_stall | ( | isc_ratelimiter_t * | rl | ) |
Stall event processing.
Definition at line 316 of file ratelimiter.c.
References ISC_FALSE, ISC_R_SHUTTINGDOWN, ISC_R_SUCCESS, isc_ratelimiter_idle, isc_ratelimiter_ratelimited, isc_ratelimiter_shuttingdown, isc_ratelimiter_stalled, isc_timer_reset(), isc_timertype_inactive, isc_ratelimiter::lock, LOCK, REQUIRE, RUNTIME_CHECK, isc_ratelimiter::state, isc_ratelimiter::timer, and UNLOCK.
| isc_result_t isc_ratelimiter_release | ( | isc_ratelimiter_t * | rl | ) |
Release a stalled rate limiter.
Definition at line 341 of file ratelimiter.c.
References isc_ratelimiter::interval, ISC_FALSE, ISC_LIST_EMPTY, ISC_R_SHUTTINGDOWN, ISC_R_SUCCESS, isc_ratelimiter_idle, isc_ratelimiter_ratelimited, isc_ratelimiter_shuttingdown, isc_ratelimiter_stalled, isc_timer_reset(), isc_timertype_ticker, isc_ratelimiter::lock, LOCK, REQUIRE, isc_ratelimiter::state, isc_ratelimiter::timer, and UNLOCK.