<?xml version='1.0'?>
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
  "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
<!-- SPDX-License-Identifier: LGPL-2.1-or-later -->

<refentry id="sd_event_source_set_ratelimit" xmlns:xi="http://www.w3.org/2001/XInclude">

  <refentryinfo>
    <title>sd_event_source_set_ratelimit</title>
    <productname>systemd</productname>
  </refentryinfo>

  <refmeta>
    <refentrytitle>sd_event_source_set_ratelimit</refentrytitle>
    <manvolnum>3</manvolnum>
  </refmeta>

  <refnamediv>
    <refname>sd_event_source_set_ratelimit</refname>
    <refname>sd_event_source_get_ratelimit</refname>
    <refname>sd_event_source_is_ratelimited</refname>

    <refpurpose>Configure rate limiting on event sources</refpurpose>
  </refnamediv>

  <refsynopsisdiv>
    <funcsynopsis>
      <funcsynopsisinfo>#include &lt;systemd/sd-event.h&gt;</funcsynopsisinfo>

      <funcprototype>
        <funcdef>int <function>sd_event_source_set_ratelimit</function></funcdef>
        <paramdef>sd_event_source *<parameter>source</parameter></paramdef>
        <paramdef>uint64_t <parameter>interval_usec</parameter></paramdef>
        <paramdef>unsigned <parameter>burst</parameter></paramdef>
      </funcprototype>

      <funcprototype>
        <funcdef>int <function>sd_event_source_get_ratelimit</function></funcdef>
        <paramdef>sd_event_source *<parameter>source</parameter></paramdef>
        <paramdef>uint64_t* <parameter>ret_interval_usec</parameter></paramdef>
        <paramdef>unsigned* <parameter>ret_burst</parameter></paramdef>
      </funcprototype>

      <funcprototype>
        <funcdef>int <function>sd_event_source_is_ratelimited</function></funcdef>
        <paramdef>sd_event_source *<parameter>source</parameter></paramdef>
      </funcprototype>

    </funcsynopsis>
  </refsynopsisdiv>

  <refsect1>
    <title>Description</title>

    <para><function>sd_event_source_set_ratelimit()</function> may be used to enforce rate limiting on an
    event source. When used an event source will be temporarily turned off when it fires more often then a
    specified burst number within a specified time interval. This is useful as simple mechanism to avoid
    event source starvation if high priority event sources fire very frequently.</para>

    <para>Pass the event source to operate on as first argument, a time interval in microseconds as second
    argument and a maximum dispatch limit ("burst") as third parameter. Whenever the event source is
    dispatched more often than the specified burst within the specified interval it is placed in a mode
    similar to being disabled with
    <citerefentry><refentrytitle>sd_event_source_set_enabled</refentrytitle><manvolnum>3</manvolnum></citerefentry>
    and the <constant>SD_EVENT_OFF</constant> parameter. However it is disabled only temporarily – once the
    specified interval is over regular operation resumes. It is again disabled temporarily once the specified rate
    limiting is hit the next time. If either the interval or the burst value are specified as zero, rate
    limiting is turned off. By default event sources do not have rate limiting enabled. Note that rate
    limiting and disabling via <function>sd_event_source_set_enabled()</function> are independent of each
    other, and an event source will only effect event loop wake-ups and is dispatched while it both is
    enabled and rate limiting is not in effect.</para>

    <para><function>sd_event_source_get_ratelimit()</function> may be used to query the current rate limiting
    parameters set on the event source object <parameter>source</parameter>. The previously set interval and
    burst vales are returned in the second and third argument.</para>

    <para><function>sd_event_source_is_ratelimited()</function> may be used to query whether the event source
    is currently affected by rate limiting, i.e. it has recently hit the rate limit and is currently
    temporarily disabled due to that.</para>

    <para>Rate limiting is currently implemented for I/O, timer, signal, defer and inotify event
    sources.</para>
  </refsect1>

  <refsect1>
    <title>Return Value</title>

    <para>On success, <function>sd_event_source_set_ratelimit()</function> and
    <function>sd_event_source_get_ratelimit()</function> return a non-negative integer. On failure, they
    return a negative errno-style error code. <function>sd_event_source_is_ratelimited</function> returns
    zero if rate limiting is currently not in effect and greater than zero if it is in effect; it returns a
    negative errno-style error code on failure.</para>

    <refsect2>
      <title>Errors</title>

      <para>Returned errors may indicate the following problems:</para>

      <variablelist>
        <varlistentry>
          <term><constant>-EINVAL</constant></term>

          <listitem><para><parameter>source</parameter> is not a valid pointer to an
          <structname>sd_event_source</structname> object.
          </para></listitem>
        </varlistentry>

        <varlistentry>
          <term><constant>-ECHILD</constant></term>

          <listitem><para>The event loop has been created in a different process.</para></listitem>
        </varlistentry>

        <varlistentry>
          <term><constant>-EDOM</constant></term>

          <listitem><para>It was attempted to use the rate limiting feature on an event source type that does
          not support rate limiting.</para></listitem>
        </varlistentry>

        <varlistentry>
          <term><constant>-ENOEXEC</constant></term>

          <listitem><para><function>sd_event_source_get_ratelimit()</function> was called on an event source
          that doesn't have rate limiting configured.</para></listitem>
        </varlistentry>

      </variablelist>
    </refsect2>
  </refsect1>

  <xi:include href="libsystemd-pkgconfig.xml" />

  <refsect1>
    <title>See Also</title>

    <para>
      <citerefentry><refentrytitle>sd-event</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
      <citerefentry><refentrytitle>sd_event_add_io</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
      <citerefentry><refentrytitle>sd_event_add_time</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
      <citerefentry><refentrytitle>sd_event_add_signal</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
      <citerefentry><refentrytitle>sd_event_add_inotify</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
      <citerefentry><refentrytitle>sd_event_add_defer</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
      <citerefentry><refentrytitle>sd_event_source_set_enabled</refentrytitle><manvolnum>3</manvolnum></citerefentry>
    </para>
  </refsect1>

</refentry>
