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

  <refentryinfo>
    <title>sd_event_source_unref</title>
    <productname>systemd</productname>
  </refentryinfo>

  <refmeta>
    <refentrytitle>sd_event_source_unref</refentrytitle>
    <manvolnum>3</manvolnum>
  </refmeta>

  <refnamediv>
    <refname>sd_event_source_unref</refname>
    <refname>sd_event_source_unrefp</refname>
    <refname>sd_event_source_ref</refname>
    <refname>sd_event_source_disable_unref</refname>
    <refname>sd_event_source_disable_unrefp</refname>

    <refpurpose>Increase or decrease event source reference counters</refpurpose>
  </refnamediv>

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

      <funcprototype>
        <funcdef>sd_event_source* <function>sd_event_source_unref</function></funcdef>
        <paramdef>sd_event_source *<parameter>source</parameter></paramdef>
      </funcprototype>

      <funcprototype>
        <funcdef>void <function>sd_event_source_unrefp</function></funcdef>
        <paramdef>sd_event_source **<parameter>source</parameter></paramdef>
      </funcprototype>

      <funcprototype>
        <funcdef>sd_event_source* <function>sd_event_source_ref</function></funcdef>
        <paramdef>sd_event_source *<parameter>source</parameter></paramdef>
      </funcprototype>

      <funcprototype>
        <funcdef>sd_event_source* <function>sd_event_source_disable_unref</function></funcdef>
        <paramdef>sd_event_source *<parameter>source</parameter></paramdef>
      </funcprototype>

      <funcprototype>
        <funcdef>void <function>sd_event_source_disable_unrefp</function></funcdef>
        <paramdef>sd_event_source **<parameter>source</parameter></paramdef>
      </funcprototype>
    </funcsynopsis>
  </refsynopsisdiv>

  <refsect1>
    <title>Description</title>

    <para><function>sd_event_source_unref()</function> may be used to
    decrement by one the reference counter of the event source object
    specified as <parameter>source</parameter>. The reference counter
    is initially set to one, when the event source is created with calls
    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>. When
    the reference counter reaches zero it is removed from its event loop
    object and destroyed.</para>

    <para><function>sd_event_source_unrefp()</function> is similar to
    <function>sd_event_source_unref()</function> but takes a pointer to a
    pointer to an <type>sd_event_source</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.</para>

    <para><function>sd_event_source_ref()</function> may be used
    to increase by one the reference counter of the event source object
    specified as <parameter>source</parameter>.</para>

    <para><function>sd_event_source_unref()</function>,
    <function>sd_bus_creds_unrefp()</function> and
    <function>sd_bus_creds_ref()</function> execute no operation if
    the passed event source object is
    <constant>NULL</constant>.</para>

    <para>Note that event source objects stay alive and may be dispatched as long as they have a reference
    counter greater than zero. In order to drop a reference of an event source and make sure the associated
    event source handler function is not called anymore it is recommended to combine a call of
    <function>sd_event_source_unref()</function> with a prior call to
    <function>sd_event_source_set_enabled()</function> with <constant>SD_EVENT_OFF</constant> or call
    <function>sd_event_source_disable_unref()</function>, see below.</para>

    <para><function>sd_event_source_disable_unref()</function> combines a call to
    <function>sd_event_source_set_enabled()</function> with <constant>SD_EVENT_OFF</constant> with
    <function>sd_event_source_unref()</function>. This ensures that the source is disabled before the local
    reference to it is lost. The <parameter>source</parameter> parameter is allowed to be
    <constant>NULL</constant>.</para>

    <para><function>sd_event_source_disable_unrefp()</function> is similar to
    <function>sd_event_source_unrefp()</function>, but in addition disables the source first. 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.</para>
  </refsect1>

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

    <para><function>sd_event_source_unref()</function> and
    <function>sd_event_source_disable_unref()</function> always return <constant>NULL</constant>.
    <function>sd_event_source_ref()</function> always returns the event source object passed in.</para>
  </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>,
      <citerefentry><refentrytitle>sd_event_source_set_enabled</refentrytitle><manvolnum>3</manvolnum></citerefentry>
    </para>
  </refsect1>

</refentry>
