summaryrefslogtreecommitdiff
path: root/man/sd_journal_print.xml
diff options
context:
space:
mode:
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2014-01-25 23:35:28 -0500
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2014-01-27 23:17:02 -0500
commit65b3903ff576488eaabb51d3c4fbf9c73d867d7c (patch)
tree0343e9d79057f6ca67acb87d6cc06f45ab7a1384 /man/sd_journal_print.xml
parent8e33886ec582336564ae11b80023abe93d7599c0 (diff)
journal: guarantee async-signal-safety in sd_journald_sendv
signal(7) provides a list of functions which may be called from a signal handler. Other functions, which only call those functions and don't access global memory and are reentrant are also safe. sd_j_sendv was mostly OK, but would call mkostemp and writev in a fallback path, which are unsafe. Being able to call sd_j_sendv in a async-signal-safe way is important because it allows it be used in signal handlers. Safety is achieved by replacing mkostemp with open(O_TMPFILE) and an open-coded writev replacement which uses write. Unfortunately, O_TMPFILE is only available on kernels >= 3.11. When O_TMPFILE is unavailable, an open-coded mkostemp is used. https://bugzilla.gnome.org/show_bug.cgi?id=722889
Diffstat (limited to 'man/sd_journal_print.xml')
-rw-r--r--man/sd_journal_print.xml31
1 files changed, 28 insertions, 3 deletions
diff --git a/man/sd_journal_print.xml b/man/sd_journal_print.xml
index a716cc35e..57d908fe2 100644
--- a/man/sd_journal_print.xml
+++ b/man/sd_journal_print.xml
@@ -153,8 +153,8 @@
for details) instead of the format string. Each
structure should reference one field of the entry to
submit. The second argument specifies the number of
- structures in the
- array. <function>sd_journal_sendv()</function> is
+ structures in the array.
+ <function>sd_journal_sendv()</function> is
particularly useful to submit binary objects to the
journal where that is necessary.</para>
@@ -221,6 +221,19 @@ sd_journal_send("MESSAGE=Hello World, this is PID %lu!", (unsigned long) getpid(
</refsect1>
<refsect1>
+ <title>Async signal safety</title>
+ <para><function>sd_journal_sendv()</function> is "async signal
+ safe" in the meaning of <citerefentry><refentrytitle>signal</refentrytitle><manvolnum>7</manvolnum></citerefentry>.
+ </para>
+
+ <para><function>sd_journal_print</function>,
+ <function>sd_journal_printv</function>,
+ <function>sd_journal_send</function>, and
+ <function>sd_journal_perror</function> are
+ not async signal safe.</para>
+ </refsect1>
+
+ <refsect1>
<title>Notes</title>
<para>The <function>sd_journal_print()</function>,
@@ -234,6 +247,16 @@ sd_journal_send("MESSAGE=Hello World, this is PID %lu!", (unsigned long) getpid(
</refsect1>
<refsect1>
+ <title>History</title>
+
+ <para><function>sd_journal_sendv()</function> was
+ modified to guarantee async-signal-safety in
+ systemd-209. Before that, it would behave safely only
+ when entry size was small enough to fit in one (large)
+ datagram.</para>
+ </refsect1>
+
+ <refsect1>
<title>See Also</title>
<para>
@@ -243,7 +266,9 @@ sd_journal_send("MESSAGE=Hello World, this is PID %lu!", (unsigned long) getpid(
<citerefentry><refentrytitle>syslog</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>perror</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>errno</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
- <citerefentry><refentrytitle>systemd.journal-fields</refentrytitle><manvolnum>7</manvolnum></citerefentry>
+ <citerefentry><refentrytitle>systemd.journal-fields</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>signal</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>socket</refentrytitle><manvolnum>7</manvolnum></citerefentry>
</para>
</refsect1>