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

  <refentryinfo>
    <title>sd_event_new</title>
    <productname>systemd</productname>
  </refentryinfo>

  <refmeta>
    <refentrytitle>sd_event_new</refentrytitle>
    <manvolnum>3</manvolnum>
  </refmeta>

  <refnamediv>
    <refname>sd_event_new</refname>
    <refname>sd_event_default</refname>
    <refname>sd_event_ref</refname>
    <refname>sd_event_unref</refname>
    <refname>sd_event_unrefp</refname>
    <refname>sd_event_get_tid</refname>
    <refname>sd_event</refname>

    <refpurpose>Acquire and release an event loop object</refpurpose>
  </refnamediv>

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

      <funcsynopsisinfo><token>typedef</token> struct sd_event sd_event;</funcsynopsisinfo>

      <funcprototype>
        <funcdef>int <function>sd_event_new</function></funcdef>
        <paramdef>sd_event **<parameter>event</parameter></paramdef>
      </funcprototype>

      <funcprototype>
        <funcdef>int <function>sd_event_default</function></funcdef>
        <paramdef>sd_event **<parameter>event</parameter></paramdef>
      </funcprototype>

      <funcprototype>
        <funcdef>sd_event *<function>sd_event_ref</function></funcdef>
        <paramdef>sd_event *<parameter>event</parameter></paramdef>
      </funcprototype>

      <funcprototype>
        <funcdef>sd_event *<function>sd_event_unref</function></funcdef>
        <paramdef>sd_event *<parameter>event</parameter></paramdef>
      </funcprototype>

      <funcprototype>
        <funcdef>void <function>sd_event_unrefp</function></funcdef>
        <paramdef>sd_event **<parameter>event</parameter></paramdef>
      </funcprototype>

      <funcprototype>
        <funcdef>int <function>sd_event_get_tid</function></funcdef>
        <paramdef>sd_event *<parameter>event</parameter></paramdef>
        <paramdef>pid_t *<parameter>tid</parameter></paramdef>
      </funcprototype>

    </funcsynopsis>
  </refsynopsisdiv>

  <refsect1>
    <title>Description</title>

    <para><function>sd_event_new()</function> allocates a new event
    loop object. The event loop object is returned in the
    <parameter>event</parameter> parameter. After use, drop
    the returned reference with
    <function>sd_event_unref()</function>. When the last reference is
    dropped, the object is freed.</para>

    <para><function>sd_event_default()</function> acquires a reference
    to the default event loop object of the calling thread, possibly
    allocating a new object if no default event loop object has been
    allocated yet for the thread. After use, drop the returned
    reference with <function>sd_event_unref()</function>. When the
    last reference is dropped, the event loop is freed. If this
    function is called while the object returned from a previous call
    from the same thread is still referenced, the same object is
    returned again, but the reference is increased by one. It is
    recommended to use this call instead of
    <function>sd_event_new()</function> in order to share event loop
    objects between various components that are dispatched in the same
    thread. All threads have exactly either zero or one default event loop
    objects associated, but never more.</para>

    <para>After allocating an event loop object, add event sources to
    it with
    <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>,
    <citerefentry><refentrytitle>sd_event_add_post</refentrytitle><manvolnum>3</manvolnum></citerefentry> or
    <citerefentry><refentrytitle>sd_event_add_exit</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
    and then execute the event loop using
    <citerefentry><refentrytitle>sd_event_loop</refentrytitle><manvolnum>3</manvolnum></citerefentry>.</para>

    <para><function>sd_event_ref()</function> increases the reference
    count of the specified event loop object by one.</para>

    <para><function>sd_event_unref()</function> decreases the
    reference count of the specified event loop object by one. If
    the count hits zero, the object is freed. Note that it
    is freed regardless of whether it is the default event loop object for a
    thread or not. This means that allocating an event loop with
    <function>sd_event_default()</function>, then releasing it, and
    then acquiring a new one with
    <function>sd_event_default()</function> will result in two
    distinct objects. Note that, in order to free an event loop object,
    all remaining event sources of the event loop also need to be
    freed as each keeps a reference to it.</para>

    <para><function>sd_event_unrefp()</function> is similar to
    <function>sd_event_unref()</function> but takes a pointer to a
    pointer to an <type>sd_event</type> object. This call is useful in
    conjunction with GCC's and LLVM's <ulink
    url="https://gcc.gnu.org/onlinedocs/gcc/Common-Variable-Attributes.html">Clean-up
    Variable Attribute</ulink>. Note that this function is defined as
    inline function. Use a declaration like the following,
    in order to allocate an event loop object that is freed
    automatically as the code block is left:</para>

    <programlisting>{
        __attribute__((cleanup(sd_event_unrefp))) sd_event *event = NULL;
        int r;
        …
        r = sd_event_default(&amp;event);
        if (r &lt; 0) {
          errno = -r;
          fprintf(stderr, "Failed to allocate event loop: %m\n");
        }
        …
}</programlisting>

    <para><function>sd_event_ref()</function>,
    <function>sd_event_unref()</function> and
    <function>sd_event_unrefp()</function> execute no operation if the
    passed in event loop object is <constant>NULL</constant>.</para>

    <para><function>sd_event_get_tid()</function> retrieves the thread
    identifier ("TID") of the thread the specified event loop object
    is associated with. This call is only supported for event loops
    allocated with <function>sd_event_default()</function>, and
    returns the identifier for the thread the event loop is the
    default event loop of. See <citerefentry
    project='man-pages'><refentrytitle>gettid</refentrytitle><manvolnum>2</manvolnum></citerefentry>
    for more information on thread identifiers.</para>
  </refsect1>

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

    <para>On success, <function>sd_event_new()</function>, <function>sd_event_default()</function> and
    <function>sd_event_get_tid()</function> return 0 or a positive integer. On failure, they return a
    negative errno-style error code. <function>sd_event_ref()</function> always returns a pointer to the
    event loop object passed in. <function>sd_event_unref()</function> always returns
    <constant>NULL</constant>.</para>

    <refsect2>
      <title>Errors</title>

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

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

          <listitem><para>Not enough memory to allocate the object.</para></listitem>
        </varlistentry>

        <varlistentry>
          <term><constant>-EMFILE</constant></term>

          <listitem><para>The maximum number of event loops has been allocated.</para></listitem>

        </varlistentry>

        <varlistentry>
          <term><constant>-ENXIO</constant></term>

          <listitem><para><function>sd_event_get_tid()</function> was invoked on an event loop object that
          was not allocated with <function>sd_event_default()</function>.</para></listitem>
        </varlistentry>

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

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

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

    <para>
      <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
      <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>,
      <citerefentry><refentrytitle>sd_event_run</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
      <citerefentry project='man-pages'><refentrytitle>gettid</refentrytitle><manvolnum>2</manvolnum></citerefentry>
    </para>
  </refsect1>

</refentry>
