chiark / gitweb /
Prep 229.9: Make all supportable API functions visible.
[elogind.git] / man / sd_event_new.xml
index 35e58ea755e480cb8a9b1dabad4850a3f0c04794..40a686b14246a9e9b0b84e286f0cb3e4c34d9e41 100644 (file)
@@ -1,31 +1,31 @@
-<?xml version='1.0'?> <!--*-nxml-*-->
+<?xml version='1.0'?> <!--*- Mode: nxml; nxml-child-indent: 2; indent-tabs-mode: nil -*-->
 <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
 "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
 
 <!--
-This file is part of systemd.
+  This file is part of elogind.
 
-Copyright 2014 Lennart Poettering
+  Copyright 2014 Lennart Poettering
 
-systemd is free software; you can redistribute it and/or modify it
-under the terms of the GNU Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 of the License, or
-(at your option) any later version.
+  elogind is free software; you can redistribute it and/or modify it
+  under the terms of the GNU Lesser General Public License as published by
+  the Free Software Foundation; either version 2.1 of the License, or
+  (at your option) any later version.
 
-systemd is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
+  elogind is distributed in the hope that it will be useful, but
+  WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+  Lesser General Public License for more details.
 
-You should have received a copy of the GNU Lesser General Public License
-along with systemd; If not, see <http://www.gnu.org/licenses/>.
+  You should have received a copy of the GNU Lesser General Public License
+  along with elogind; If not, see <http://www.gnu.org/licenses/>.
 -->
 
-<refentry id="sd_event_new" conditional="ENABLE_KDBUS">
+<refentry id="sd_event_new" xmlns:xi="http://www.w3.org/2001/XInclude">
 
   <refentryinfo>
     <title>sd_event_new</title>
-    <productname>systemd</productname>
+    <productname>elogind</productname>
 
     <authorgroup>
       <author>
@@ -47,32 +47,48 @@ along with systemd; If not, see <http://www.gnu.org/licenses/>.
     <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-bus.h&gt;</funcsynopsisinfo>
+      <funcsynopsisinfo>#include &lt;elogind/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_bus **<parameter>event</parameter></paramdef>
+        <paramdef>sd_event **<parameter>event</parameter></paramdef>
       </funcprototype>
 
       <funcprototype>
         <funcdef>int <function>sd_event_default</function></funcdef>
-        <paramdef>sd_bus **<parameter>event</parameter></paramdef>
+        <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_bus *<function>sd_event_ref</function></funcdef>
-        <paramdef>sd_bus *<parameter>event</parameter></paramdef>
+        <funcdef>sd_event *<function>sd_event_unref</function></funcdef>
+        <paramdef>sd_event *<parameter>event</parameter></paramdef>
       </funcprototype>
 
       <funcprototype>
-        <funcdef>sd_bus *<function>sd_event_unref</function></funcdef>
-        <paramdef>sd_bus *<parameter>event</parameter></paramdef>
+        <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>
@@ -86,7 +102,7 @@ along with systemd; If not, see <http://www.gnu.org/licenses/>.
     <parameter>event</parameter> parameter. After use, drop
     the returned reference with
     <function>sd_event_unref()</function>. When the last reference is
-    dropped, the event loop is freed.</para>
+    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
@@ -100,15 +116,26 @@ along with systemd; If not, see <http://www.gnu.org/licenses/>.
     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 either have exactly zero or one default event loop
-    associated, but never more.</para>
+    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>
+    or
+    <citerefentry><refentrytitle>sd_event_add_defer</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
+    and then execute the event loop using
+    <citerefentry><refentrytitle>sd_event_run</refentrytitle><manvolnum>3</manvolnum></citerefentry>.</para>
 
     <para><function>sd_event_ref()</function> increases the reference
-    counter of the specified event loop object by one.</para>
+    count of the specified event loop object by one.</para>
 
     <para><function>sd_event_unref()</function> decreases the
-    reference counter of the specified event loop object by one. If
-    the counter hits zero, the event loop object is freed. Note that it
+    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
@@ -116,7 +143,41 @@ along with systemd; If not, see <http://www.gnu.org/licenses/>.
     <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 they each keep a reference to it.</para>
+    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)
+                fprintf(stderr, "Failed to allocate event loop: %s\n", strerror(-r));
+        …
+}</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>
@@ -128,7 +189,7 @@ along with systemd; If not, see <http://www.gnu.org/licenses/>.
     code. <function>sd_event_ref()</function> always returns a pointer
     to the event loop object passed
     in. <function>sd_event_unref()</function> always returns
-    NULL.</para>
+    <constant>NULL</constant>.</para>
   </refsect1>
 
   <refsect1>
@@ -138,35 +199,36 @@ along with systemd; If not, see <http://www.gnu.org/licenses/>.
 
     <variablelist>
       <varlistentry>
-        <term><varname>-ENOMEM</varname></term>
+        <term><constant>-ENOMEM</constant></term>
 
-        <listitem><para>Not enough memory to allocate object</para></listitem>
+        <listitem><para>Not enough memory to allocate the object.</para></listitem>
       </varlistentry>
 
       <varlistentry>
-        <term><varname>-EMFILE</varname></term>
+        <term><constant>-EMFILE</constant></term>
 
         <listitem><para>The maximum number of event loops has been allocated.</para></listitem>
 
       </varlistentry>
-    </variablelist>
-  </refsect1>
 
-  <refsect1>
-    <title>Notes</title>
+      <varlistentry>
+        <term><constant>-ENXIO</constant></term>
 
-    <para><function>sd_event_new()</function> and the other functions
-    described here are available as a shared library, which can be
-    compiled and linked to with the
-    <constant>libsystemd</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
-    file.</para>
+        <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>
   </refsect1>
 
+  <xi:include href="libelogind-pkgconfig.xml" />
+
   <refsect1>
     <title>See Also</title>
 
     <para>
-      <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>elogind</refentrytitle><manvolnum>8</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>,
@@ -174,7 +236,9 @@ along with systemd; If not, see <http://www.gnu.org/licenses/>.
       <citerefentry><refentrytitle>sd_event_add_child</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>,
-      <citerefentry><refentrytitle>sd_event_add_exit</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+      <citerefentry><refentrytitle>sd_event_add_exit</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>