<?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_priority" xmlns:xi="http://www.w3.org/2001/XInclude">

  <refentryinfo>
    <title>sd_event_source_set_priority</title>
    <productname>systemd</productname>
  </refentryinfo>

  <refmeta>
    <refentrytitle>sd_event_source_set_priority</refentrytitle>
    <manvolnum>3</manvolnum>
  </refmeta>

  <refnamediv>
    <refname>sd_event_source_set_priority</refname>
    <refname>sd_event_source_get_priority</refname>
    <refname>SD_EVENT_PRIORITY_IMPORTANT</refname>
    <refname>SD_EVENT_PRIORITY_NORMAL</refname>
    <refname>SD_EVENT_PRIORITY_IDLE</refname>

    <refpurpose>Set or retrieve the priority of event sources</refpurpose>
  </refnamediv>

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

      <funcsynopsisinfo><token>enum</token> {
        <constant>SD_EVENT_PRIORITY_IMPORTANT</constant> = -100,
        <constant>SD_EVENT_PRIORITY_NORMAL</constant> = 0,
        <constant>SD_EVENT_PRIORITY_IDLE</constant> = 100,
};</funcsynopsisinfo>

      <funcprototype>
        <funcdef>int <function>sd_event_source_set_priority</function></funcdef>
        <paramdef>sd_event_source *<parameter>source</parameter></paramdef>
        <paramdef>int64_t <parameter>priority</parameter></paramdef>
      </funcprototype>

      <funcprototype>
        <funcdef>int <function>sd_event_source_get_priority</function></funcdef>
        <paramdef>sd_event_source *<parameter>source</parameter></paramdef>
        <paramdef>int64_t *<parameter>priority</parameter></paramdef>
      </funcprototype>

    </funcsynopsis>
  </refsynopsisdiv>

  <refsect1>
    <title>Description</title>

    <para><function>sd_event_source_set_priority()</function> may be
    used to set the priority for the event source object specified as
    <parameter>source</parameter>. The priority is specified as an
    arbitrary signed 64bit integer. The priority is initialized to
    <constant>SD_EVENT_PRIORITY_NORMAL</constant> (0) when the event
    source is allocated with a call such as
    <citerefentry><refentrytitle>sd_event_add_io</refentrytitle><manvolnum>3</manvolnum></citerefentry>
    or
    <citerefentry><refentrytitle>sd_event_add_time</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
    and may be changed with this call. If multiple event sources have seen events at the same time, they are dispatched in the order indicated by the
    event sources' priorities. Event sources with smaller priority
    values are dispatched first. As well-known points of reference,
    the constants <constant>SD_EVENT_PRIORITY_IMPORTANT</constant>
    (-100), <constant>SD_EVENT_PRIORITY_NORMAL</constant> (0) and
    <constant>SD_EVENT_PRIORITY_IDLE</constant> (100) may be used to
    indicate event sources that shall be dispatched early, normally or
    late. It is recommended to specify priorities based on these
    definitions, and relative to them — however, the full 64bit
    signed integer range is available for ordering event
    sources.</para>

    <para>Priorities define the order in which event sources that have
    seen events are dispatched. Care should be taken to ensure that
    high-priority event sources (those with negative priority values
    assigned) do not cause starvation of low-priority event sources
    (those with positive priority values assigned).</para>

    <para>The order in which event sources with the same priority are
    dispatched is undefined, but the event loop generally tries to
    dispatch them in the order it learnt about events on them. As the
    backing kernel primitives do not provide accurate information
    about the order in which events occurred this is not necessarily
    reliable. However, it is guaranteed that if events are seen on
    multiple same-priority event sources at the same time, each one is
    not dispatched again until all others have been dispatched
    once. This behavior guarantees that within each priority
    particular event sources do not starve or dominate the event
    loop.</para>

    <para>The priority of event sources may be changed at any time of their lifetime, with the exception of inotify
    event sources (i.e. those created with
    <citerefentry><refentrytitle>sd_event_add_inotify</refentrytitle><manvolnum>3</manvolnum></citerefentry>) whose
    priority may only be changed in the time between their initial creation and the first subsequent event loop
    iteration.</para>

    <para><function>sd_event_source_get_priority()</function> may be
    used to query the current priority assigned to the event source
    object <parameter>source</parameter>.</para>
  </refsect1>

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

    <para>On success, <function>sd_event_source_set_priority()</function> and
    <function>sd_event_source_get_priority()</function> return a non-negative integer. On failure, they
    return a negative errno-style error code.</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>-ENOMEM</constant></term>

          <listitem><para>Not enough memory.</para></listitem>
        </varlistentry>

        <varlistentry>
          <term><constant>-ESTALE</constant></term>

          <listitem><para>The event loop is already terminated.</para></listitem>

        </varlistentry>

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

          <listitem><para>The event loop has been created in a different process.</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_child</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>
    </para>
  </refsect1>

</refentry>
