ryantimwilson / rpms / systemd

Forked from rpms/systemd a month ago
Clone
923a60
From dd004bcc058dbb7c66b8eb1a728732ccfce746c7 Mon Sep 17 00:00:00 2001
923a60
From: Jan Synacek <jsynacek@redhat.com>
923a60
Date: Tue, 5 Mar 2019 10:45:07 +0100
923a60
Subject: [PATCH] man: be more explicit about thread safety of sd_journal
923a60
923a60
This adds two generic paragaphs we include via xinclude. One is the
923a60
"strict" version, which contains wording saying that we are thread
923a60
agnostic and what that means. And the other is the "safe" version, for
923a60
the cases we provide fully safety.
923a60
923a60
Let's then change most man pages to use either of these generic
923a60
paragraphs. With one exception: man/sd_journal_get_catalog.xml contains
923a60
both kinds of function, we hence use manual wording.
923a60
923a60
(cherry picked from commit 64a7ef8bc06b5dcfcd9f99ea10a43bde75c4370f)
923a60
923a60
Related: #1609349
923a60
---
923a60
 man/sd-journal.xml                          | 14 ++++++++++++++
923a60
 man/sd_journal_get_catalog.xml              |  9 +++++++++
923a60
 man/sd_journal_get_cursor.xml               |  4 +++-
923a60
 man/sd_journal_get_cutoff_realtime_usec.xml |  4 +++-
923a60
 man/sd_journal_get_data.xml                 |  4 +++-
923a60
 man/sd_journal_get_fd.xml                   |  4 +++-
923a60
 man/sd_journal_get_realtime_usec.xml        |  4 +++-
923a60
 man/sd_journal_get_usage.xml                |  4 +++-
923a60
 man/sd_journal_has_runtime_files.xml        |  8 +++++++-
923a60
 man/sd_journal_next.xml                     |  4 +++-
923a60
 man/sd_journal_open.xml                     |  4 +++-
923a60
 man/sd_journal_print.xml                    |  4 +++-
923a60
 man/sd_journal_query_unique.xml             |  4 +++-
923a60
 man/sd_journal_seek_head.xml                |  4 +++-
923a60
 man/sd_journal_stream_fd.xml                |  4 +++-
923a60
 man/threads-aware.xml                       | 17 +++++++++++++++++
923a60
 16 files changed, 83 insertions(+), 13 deletions(-)
923a60
 create mode 100644 man/threads-aware.xml
923a60
923a60
diff --git a/man/sd-journal.xml b/man/sd-journal.xml
923a60
index a1185d372b..11af4cd9b9 100644
923a60
--- a/man/sd-journal.xml
923a60
+++ b/man/sd-journal.xml
923a60
@@ -97,6 +97,20 @@
923a60
     tool.</para>
923a60
   </refsect1>
923a60
 
923a60
+  <refsect1>
923a60
+    <title>Thread safety</title>
923a60
+
923a60
+    <para>Functions that operate on <structname>sd_journal</structname> objects are thread agnostic — given
923a60
+    <structname>sd_journal</structname> pointer may only be used from one specific thread at all times (and it has to
923a60
+    be the very same one during the entire lifetime of the object), but multiple, independent threads may use multiple,
923a60
+    independent objects safely. Other functions — those that are used to send entries to the journal, like
923a60
+    <citerefentry><refentrytitle>sd_journal_print</refentrytitle><manvolnum>3</manvolnum></citerefentry> and similar,
923a60
+    or those that are used to retrieve global information like
923a60
+    <citerefentry><refentrytitle>sd_journal_stream_fd</refentrytitle><manvolnum>3</manvolnum></citerefentry> and
923a60
+    <citerefentry><refentrytitle>sd_journal_get_catalog_for_message_id</refentrytitle><manvolnum>3</manvolnum></citerefentry>
923a60
+    are fully thread-safe and may be called from multiple threads in parallel.</para>
923a60
+  </refsect1>
923a60
+
923a60
   <xi:include href="libsystemd-pkgconfig.xml" />
923a60
 
923a60
   <refsect1>
923a60
diff --git a/man/sd_journal_get_catalog.xml b/man/sd_journal_get_catalog.xml
923a60
index c19eb11b20..86eb659fe5 100644
923a60
--- a/man/sd_journal_get_catalog.xml
923a60
+++ b/man/sd_journal_get_catalog.xml
923a60
@@ -112,6 +112,15 @@
923a60
   <refsect1>
923a60
     <title>Notes</title>
923a60
 
923a60
+    <para>Function <function>sd_journal_get_catalog()</function> is thread-agnostic and only
923a60
+    a single specific thread may operate on a given object during its entire lifetime. It's safe to allocate multiple
923a60
+    independent objects and use each from a specific thread in parallel. However, it's not safe to allocate such an
923a60
+    object in one thread, and operate or free it from any other, even if locking is used to ensure these threads don't
923a60
+    operate on it at the very same time.</para>
923a60
+
923a60
+    <para>Function <function>sd_journal_get_catalog_for_message_id()</function> is are thread-safe and may be called in
923a60
+    parallel from multiple threads.</para>
923a60
+
923a60
     <para>The <function>sd_journal_get_catalog()</function> and
923a60
     <function>sd_journal_get_catalog_for_message_id()</function>
923a60
     interfaces are available as a shared library, which can be
923a60
diff --git a/man/sd_journal_get_cursor.xml b/man/sd_journal_get_cursor.xml
923a60
index a400d8b1b5..0a20c36146 100644
923a60
--- a/man/sd_journal_get_cursor.xml
923a60
+++ b/man/sd_journal_get_cursor.xml
923a60
@@ -21,7 +21,7 @@
923a60
   along with systemd; If not, see <http://www.gnu.org/licenses/>.
923a60
 -->
923a60
 
923a60
-<refentry id="sd_journal_get_cursor">
923a60
+<refentry id="sd_journal_get_cursor" xmlns:xi="http://www.w3.org/2001/XInclude">
923a60
 
923a60
   <refentryinfo>
923a60
     <title>sd_journal_get_cursor</title>
923a60
@@ -122,6 +122,8 @@
923a60
   <refsect1>
923a60
     <title>Notes</title>
923a60
 
923a60
+    <xi:include href="threads-aware.xml" xpointer="strict" />
923a60
+
923a60
     <para>The <function>sd_journal_get_cursor()</function> and
923a60
     <function>sd_journal_test_cursor()</function> interfaces are
923a60
     available as a shared library, which can be compiled and linked to
923a60
diff --git a/man/sd_journal_get_cutoff_realtime_usec.xml b/man/sd_journal_get_cutoff_realtime_usec.xml
923a60
index 23e7cc65e8..782228009d 100644
923a60
--- a/man/sd_journal_get_cutoff_realtime_usec.xml
923a60
+++ b/man/sd_journal_get_cutoff_realtime_usec.xml
923a60
@@ -21,7 +21,7 @@
923a60
   along with systemd; If not, see <http://www.gnu.org/licenses/>.
923a60
 -->
923a60
 
923a60
-<refentry id="sd_journal_get_cutoff_realtime_usec">
923a60
+<refentry id="sd_journal_get_cutoff_realtime_usec" xmlns:xi="http://www.w3.org/2001/XInclude">
923a60
 
923a60
   <refentryinfo>
923a60
     <title>sd_journal_get_cutoff_realtime_usec</title>
923a60
@@ -120,6 +120,8 @@
923a60
   <refsect1>
923a60
     <title>Notes</title>
923a60
 
923a60
+    <xi:include href="threads-aware.xml" xpointer="strict" />
923a60
+
923a60
     <para>The
923a60
     <function>sd_journal_get_cutoff_realtime_usec()</function> and
923a60
     <function>sd_journal_get_cutoff_monotonic_usec()</function>
923a60
diff --git a/man/sd_journal_get_data.xml b/man/sd_journal_get_data.xml
923a60
index 1afbd7371c..dce421795a 100644
923a60
--- a/man/sd_journal_get_data.xml
923a60
+++ b/man/sd_journal_get_data.xml
923a60
@@ -21,7 +21,7 @@
923a60
   along with systemd; If not, see <http://www.gnu.org/licenses/>.
923a60
 -->
923a60
 
923a60
-<refentry id="sd_journal_get_data">
923a60
+<refentry id="sd_journal_get_data" xmlns:xi="http://www.w3.org/2001/XInclude">
923a60
 
923a60
   <refentryinfo>
923a60
     <title>sd_journal_get_data</title>
923a60
@@ -183,6 +183,8 @@
923a60
   <refsect1>
923a60
     <title>Notes</title>
923a60
 
923a60
+    <xi:include href="threads-aware.xml" xpointer="strict"/>
923a60
+
923a60
     <para>The <function>sd_journal_get_data()</function>,
923a60
     <function>sd_journal_enumerate_data()</function>,
923a60
     <function>sd_journal_restart_data()</function>,
923a60
diff --git a/man/sd_journal_get_fd.xml b/man/sd_journal_get_fd.xml
923a60
index 3a38f733ab..a96857d0df 100644
923a60
--- a/man/sd_journal_get_fd.xml
923a60
+++ b/man/sd_journal_get_fd.xml
923a60
@@ -21,7 +21,7 @@
923a60
   along with systemd; If not, see <http://www.gnu.org/licenses/>.
923a60
 -->
923a60
 
923a60
-<refentry id="sd_journal_get_fd">
923a60
+<refentry id="sd_journal_get_fd" xmlns:xi="http://www.w3.org/2001/XInclude">
923a60
 
923a60
   <refentryinfo>
923a60
     <title>sd_journal_get_fd</title>
923a60
@@ -231,6 +231,8 @@ else {
923a60
   <refsect1>
923a60
     <title>Notes</title>
923a60
 
923a60
+    <xi:include href="threads-aware.xml" xpointer="strict"/>
923a60
+
923a60
     <para>The <function>sd_journal_get_fd()</function>,
923a60
     <function>sd_journal_get_events()</function>,
923a60
     <function>sd_journal_reliable_fd()</function>,
923a60
diff --git a/man/sd_journal_get_realtime_usec.xml b/man/sd_journal_get_realtime_usec.xml
923a60
index 607d74666b..b67e4d6c2d 100644
923a60
--- a/man/sd_journal_get_realtime_usec.xml
923a60
+++ b/man/sd_journal_get_realtime_usec.xml
923a60
@@ -21,7 +21,7 @@
923a60
   along with systemd; If not, see <http://www.gnu.org/licenses/>.
923a60
 -->
923a60
 
923a60
-<refentry id="sd_journal_get_realtime_usec">
923a60
+<refentry id="sd_journal_get_realtime_usec" xmlns:xi="http://www.w3.org/2001/XInclude">
923a60
 
923a60
   <refentryinfo>
923a60
     <title>sd_journal_get_realtime_usec</title>
923a60
@@ -115,6 +115,8 @@
923a60
   <refsect1>
923a60
     <title>Notes</title>
923a60
 
923a60
+    <xi:include href="threads-aware.xml" xpointer="strict"/>
923a60
+
923a60
     <para>The <function>sd_journal_get_realtime_usec()</function> and
923a60
     <function>sd_journal_get_monotonic_usec()</function> interfaces
923a60
     are available as a shared library, which can be compiled and
923a60
diff --git a/man/sd_journal_get_usage.xml b/man/sd_journal_get_usage.xml
923a60
index 72c804d834..6281bc850d 100644
923a60
--- a/man/sd_journal_get_usage.xml
923a60
+++ b/man/sd_journal_get_usage.xml
923a60
@@ -21,7 +21,7 @@
923a60
   along with systemd; If not, see <http://www.gnu.org/licenses/>.
923a60
 -->
923a60
 
923a60
-<refentry id="sd_journal_get_usage">
923a60
+<refentry id="sd_journal_get_usage" xmlns:xi="http://www.w3.org/2001/XInclude">
923a60
 
923a60
   <refentryinfo>
923a60
     <title>sd_journal_get_usage</title>
923a60
@@ -80,6 +80,8 @@
923a60
   <refsect1>
923a60
     <title>Notes</title>
923a60
 
923a60
+    <xi:include href="threads-aware.xml" xpointer="strict"/>
923a60
+
923a60
     <para>The <function>sd_journal_get_usage()</function> interface is
923a60
     available as a shared library, which can be compiled and linked to
923a60
     with the
923a60
diff --git a/man/sd_journal_has_runtime_files.xml b/man/sd_journal_has_runtime_files.xml
923a60
index 237e649206..4dff3c67d0 100644
923a60
--- a/man/sd_journal_has_runtime_files.xml
923a60
+++ b/man/sd_journal_has_runtime_files.xml
923a60
@@ -21,7 +21,7 @@
923a60
   along with systemd; If not, see <http://www.gnu.org/licenses/>.
923a60
 -->
923a60
 
923a60
-<refentry id="sd_journal_has_runtime_files">
923a60
+<refentry id="sd_journal_has_runtime_files" xmlns:xi="http://www.w3.org/2001/XInclude">
923a60
 
923a60
   <refentryinfo>
923a60
     <title>sd_journal_has_runtime_files</title>
923a60
@@ -85,6 +85,12 @@
923a60
     </para>
923a60
   </refsect1>
923a60
 
923a60
+  <refsect1>
923a60
+    <title>Notes</title>
923a60
+
923a60
+    <xi:include href="threads-aware.xml" xpointer="strict"/>
923a60
+  </refsect1>
923a60
+
923a60
   <refsect1>
923a60
     <title>See Also</title>
923a60
     <para>
923a60
diff --git a/man/sd_journal_next.xml b/man/sd_journal_next.xml
923a60
index 115fe26661..c8664994ce 100644
923a60
--- a/man/sd_journal_next.xml
923a60
+++ b/man/sd_journal_next.xml
923a60
@@ -21,7 +21,7 @@
923a60
   along with systemd; If not, see <http://www.gnu.org/licenses/>.
923a60
 -->
923a60
 
923a60
-<refentry id="sd_journal_next">
923a60
+<refentry id="sd_journal_next" xmlns:xi="http://www.w3.org/2001/XInclude">
923a60
 
923a60
   <refentryinfo>
923a60
     <title>sd_journal_next</title>
923a60
@@ -146,6 +146,8 @@
923a60
   <refsect1>
923a60
     <title>Notes</title>
923a60
 
923a60
+    <xi:include href="threads-aware.xml" xpointer="strict"/>
923a60
+
923a60
     <para>The <function>sd_journal_next()</function>,
923a60
     <function>sd_journal_previous()</function>,
923a60
     <function>sd_journal_next_skip()</function> and
923a60
diff --git a/man/sd_journal_open.xml b/man/sd_journal_open.xml
923a60
index fb572802a3..c3044670de 100644
923a60
--- a/man/sd_journal_open.xml
923a60
+++ b/man/sd_journal_open.xml
923a60
@@ -21,7 +21,7 @@
923a60
   along with systemd; If not, see <http://www.gnu.org/licenses/>.
923a60
 -->
923a60
 
923a60
-<refentry id="sd_journal_open">
923a60
+<refentry id="sd_journal_open" xmlns:xi="http://www.w3.org/2001/XInclude">
923a60
 
923a60
   <refentryinfo>
923a60
     <title>sd_journal_open</title>
923a60
@@ -196,6 +196,8 @@
923a60
   <refsect1>
923a60
     <title>Notes</title>
923a60
 
923a60
+    <xi:include href="threads-aware.xml" xpointer="strict"/>
923a60
+
923a60
     <para>The <function>sd_journal_open()</function>,
923a60
     <function>sd_journal_open_directory()</function> and
923a60
     <function>sd_journal_close()</function> interfaces are available
923a60
diff --git a/man/sd_journal_print.xml b/man/sd_journal_print.xml
923a60
index 0cd0b45b9a..50ad5de7be 100644
923a60
--- a/man/sd_journal_print.xml
923a60
+++ b/man/sd_journal_print.xml
923a60
@@ -21,7 +21,7 @@
923a60
   along with systemd; If not, see <http://www.gnu.org/licenses/>.
923a60
 -->
923a60
 
923a60
-<refentry id="sd_journal_print">
923a60
+<refentry id="sd_journal_print" xmlns:xi="http://www.w3.org/2001/XInclude">
923a60
 
923a60
   <refentryinfo>
923a60
     <title>sd_journal_print</title>
923a60
@@ -232,6 +232,8 @@ sd_journal_send("MESSAGE=Hello World, this is PID %lu!", (unsigned long) getpid(
923a60
   <refsect1>
923a60
     <title>Notes</title>
923a60
 
923a60
+    <xi:include href="threads-aware.xml" xpointer="safe"/>
923a60
+
923a60
     <para>The <function>sd_journal_print()</function>,
923a60
     <function>sd_journal_printv()</function>,
923a60
     <function>sd_journal_send()</function> and
923a60
diff --git a/man/sd_journal_query_unique.xml b/man/sd_journal_query_unique.xml
923a60
index ac0e5f633f..074dfd6789 100644
923a60
--- a/man/sd_journal_query_unique.xml
923a60
+++ b/man/sd_journal_query_unique.xml
923a60
@@ -21,7 +21,7 @@
923a60
   along with systemd; If not, see <http://www.gnu.org/licenses/>.
923a60
 -->
923a60
 
923a60
-<refentry id="sd_journal_query_unique">
923a60
+<refentry id="sd_journal_query_unique" xmlns:xi="http://www.w3.org/2001/XInclude">
923a60
 
923a60
   <refentryinfo>
923a60
     <title>sd_journal_query_unique</title>
923a60
@@ -145,6 +145,8 @@
923a60
   <refsect1>
923a60
     <title>Notes</title>
923a60
 
923a60
+    <xi:include href="threads-aware.xml" xpointer="strict"/>
923a60
+
923a60
     <para>The <function>sd_journal_query_unique()</function>,
923a60
     <function>sd_journal_enumerate_unique()</function> and
923a60
     <function>sd_journal_restart_unique()</function> interfaces are
923a60
diff --git a/man/sd_journal_seek_head.xml b/man/sd_journal_seek_head.xml
923a60
index d74c2d5bbc..8bbbb22a73 100644
923a60
--- a/man/sd_journal_seek_head.xml
923a60
+++ b/man/sd_journal_seek_head.xml
923a60
@@ -21,7 +21,7 @@
923a60
   along with systemd; If not, see <http://www.gnu.org/licenses/>.
923a60
 -->
923a60
 
923a60
-<refentry id="sd_journal_seek_head">
923a60
+<refentry id="sd_journal_seek_head" xmlns:xi="http://www.w3.org/2001/XInclude">
923a60
 
923a60
   <refentryinfo>
923a60
     <title>sd_journal_seek_head</title>
923a60
@@ -144,6 +144,8 @@
923a60
   <refsect1>
923a60
     <title>Notes</title>
923a60
 
923a60
+    <xi:include href="threads-aware.xml" xpointer="strict"/>
923a60
+
923a60
     <para>The <function>sd_journal_seek_head()</function>,
923a60
     <function>sd_journal_seek_tail()</function>,
923a60
     <function>sd_journal_seek_monotonic_usec()</function>,
923a60
diff --git a/man/sd_journal_stream_fd.xml b/man/sd_journal_stream_fd.xml
923a60
index 2ea7731b48..340760ba36 100644
923a60
--- a/man/sd_journal_stream_fd.xml
923a60
+++ b/man/sd_journal_stream_fd.xml
923a60
@@ -21,7 +21,7 @@
923a60
   along with systemd; If not, see <http://www.gnu.org/licenses/>.
923a60
 -->
923a60
 
923a60
-<refentry id="sd_journal_stream_fd">
923a60
+<refentry id="sd_journal_stream_fd" xmlns:xi="http://www.w3.org/2001/XInclude">
923a60
 
923a60
   <refentryinfo>
923a60
     <title>sd_journal_stream_fd</title>
923a60
@@ -104,6 +104,8 @@
923a60
   <refsect1>
923a60
     <title>Notes</title>
923a60
 
923a60
+    <xi:include href="threads-aware.xml" xpointer="safe"/>
923a60
+
923a60
     <para>The <function>sd_journal_stream_fd()</function> interface is
923a60
     available as a shared library, which can be compiled and linked to
923a60
     with the
923a60
diff --git a/man/threads-aware.xml b/man/threads-aware.xml
923a60
new file mode 100644
923a60
index 0000000000..7985f4acd1
923a60
--- /dev/null
923a60
+++ b/man/threads-aware.xml
923a60
@@ -0,0 +1,17 @@
923a60
+
923a60
+
923a60
+
923a60
+
923a60
+  SPDX-License-Identifier: LGPL-2.1+
923a60
+-->
923a60
+
923a60
+<refsect1>
923a60
+
923a60
+<para id="strict">All functions listed here are thread-agnostic and only a single specific thread may operate on a
923a60
+given object during its entire lifetime. It's safe to allocate multiple independent objects and use each from a
923a60
+specific thread in parallel. However, it's not safe to allocate such an object in one thread, and operate or free it
923a60
+from any other, even if locking is used to ensure these threads don't operate on it at the very same time.</para>
923a60
+
923a60
+<para id="safe">All functions listed here are thread-safe and may be called in parallel from multiple threads.</para>
923a60
+
923a60
+</refsect1>