diff options
author | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2014-01-25 23:35:28 -0500 |
---|---|---|
committer | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2014-01-27 23:17:02 -0500 |
commit | 65b3903ff576488eaabb51d3c4fbf9c73d867d7c (patch) | |
tree | 0343e9d79057f6ca67acb87d6cc06f45ab7a1384 /man | |
parent | 8e33886ec582336564ae11b80023abe93d7599c0 (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')
-rw-r--r-- | man/sd_journal_print.xml | 31 |
1 files changed, 28 insertions, 3 deletions
diff --git a/man/sd_journal_print.xml b/man/sd_journal_print.xml index a716cc35e6..57d908fe22 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> |