<?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 internal 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, the object is detached from the 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 internal 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>
