public inbox for libc-alpha@sourceware.org
 help / color / mirror / Atom feed
From: Adhemerval Zanella <adhemerval.zanella@linaro.org>
To: libc-alpha@sourceware.org
Subject: [PATCH 05/11] misc: syslog: Assume MSG_NOSIGNAL support (BZ #17144)
Date: Mon, 12 Apr 2021 18:11:07 -0300	[thread overview]
Message-ID: <20210412211113.393120-5-adhemerval.zanella@linaro.org> (raw)
In-Reply-To: <20210412211113.393120-1-adhemerval.zanella@linaro.org>

MSG_NOSIGNAL was added on POSIX 2008 and Hurd seems to support it.
The SIGPIPE handling also makes the implementation not thread-safe
(due the sigaction usage).

Checked on x86_64-linux-gnu.
---
 misc/syslog.c                    | 49 +++-----------------------------
 sysdeps/unix/sysv/linux/syslog.c |  4 ---
 2 files changed, 4 insertions(+), 49 deletions(-)
 delete mode 100644 sysdeps/unix/sysv/linux/syslog.c

diff --git a/misc/syslog.c b/misc/syslog.c
index 668b4c852b..a3e458f54a 100644
--- a/misc/syslog.c
+++ b/misc/syslog.c
@@ -69,13 +69,6 @@ extern char *__progname;                /* Program name, from crt0.  */
 __libc_lock_define_initialized (static, syslog_lock)
 static void openlog_internal (const char *, int, int);
 static void closelog_internal (void);
-#ifndef NO_SIGPIPE
-static void sigpipe_handler (int);
-#endif
-
-#ifndef send_flags
-# define send_flags 0
-#endif
 
 struct cleanup_arg
 {
@@ -89,15 +82,8 @@ static void cancel_handler (void *ptr)
   struct cleanup_arg *clarg = (struct cleanup_arg *) ptr;
 
   if (clarg != NULL)
-    {
-#ifndef NO_SIGPIPE
-      if (clarg->oldaction != NULL)
-        __sigaction (SIGPIPE, clarg->oldaction, NULL);
-#endif
-
-      /* Free the memstream buffer,  */
-      free (clarg->buf);
-    }
+    /* Free the memstream buffer,  */
+    free (clarg->buf);
 
   /* Free the lock.  */
   __libc_lock_unlock (syslog_lock);
@@ -154,10 +140,6 @@ __vsyslog_internal (int pri, const char *fmt, va_list ap,
   char *buf = 0;
   size_t bufsize = 0;
   size_t msgoff;
-#ifndef NO_SIGPIPE
-  struct sigaction action, oldaction;
-  int sigpipe;
-#endif
   int saved_errno = errno;
   char failbuf[3 * sizeof (pid_t) + sizeof "out of memory []"];
 
@@ -268,16 +250,6 @@ __vsyslog_internal (int pri, const char *fmt, va_list ap,
       (void) __writev (STDERR_FILENO, iov, v - iov + 1);
     }
 
-#ifndef NO_SIGPIPE
-  /* Prepare for a broken connection.  */
-  memset (&action, 0, sizeof (action));
-  action.sa_handler = sigpipe_handler;
-  sigemptyset (&action.sa_mask);
-  sigpipe = __sigaction (SIGPIPE, &action, &oldaction);
-  if (sigpipe == 0)
-    clarg.oldaction = &oldaction;
-#endif
-
   /* Get connected, output the message to the local logger.  */
   if (!connected)
     openlog_internal (LogTag, LogStat | LOG_NDELAY, 0);
@@ -287,7 +259,7 @@ __vsyslog_internal (int pri, const char *fmt, va_list ap,
   if (LogType == SOCK_STREAM)
     ++bufsize;
 
-  if (!connected || __send (LogFile, buf, bufsize, send_flags) < 0)
+  if (!connected || __send (LogFile, buf, bufsize, MSG_NOSIGNAL) < 0)
     {
       if (connected)
         {
@@ -296,7 +268,7 @@ __vsyslog_internal (int pri, const char *fmt, va_list ap,
           openlog_internal (LogTag, LogStat | LOG_NDELAY, 0);
         }
 
-      if (!connected || __send (LogFile, buf, bufsize, send_flags) < 0)
+      if (!connected || __send (LogFile, buf, bufsize, MSG_NOSIGNAL) < 0)
         {
           closelog_internal ();        /* attempt re-open next time  */
           /*
@@ -314,11 +286,6 @@ __vsyslog_internal (int pri, const char *fmt, va_list ap,
         }
     }
 
-#ifndef NO_SIGPIPE
-  if (sigpipe == 0)
-    __sigaction (SIGPIPE, &oldaction, (struct sigaction *) NULL);
-#endif
-
 out:
   /* End of critical section.  */
   __libc_cleanup_pop (0);
@@ -392,14 +359,6 @@ openlog (const char *ident, int logstat, int logfac)
   __libc_cleanup_pop (1);
 }
 
-#ifndef NO_SIGPIPE
-static void
-sigpipe_handler (int signo)
-{
-  closelog_internal ();
-}
-#endif
-
 static void
 closelog_internal (void)
 {
diff --git a/sysdeps/unix/sysv/linux/syslog.c b/sysdeps/unix/sysv/linux/syslog.c
deleted file mode 100644
index cf8ce23385..0000000000
--- a/sysdeps/unix/sysv/linux/syslog.c
+++ /dev/null
@@ -1,4 +0,0 @@
-#define NO_SIGPIPE
-#define send_flags MSG_NOSIGNAL
-
-#include <misc/syslog.c>
-- 
2.27.0


  parent reply	other threads:[~2021-04-12 21:11 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-04-12 21:11 [PATCH 01/11] support: Add xmkfifo Adhemerval Zanella
2021-04-12 21:11 ` [PATCH 02/11] misc: Add syslog test Adhemerval Zanella
2021-04-12 21:11 ` [PATCH 03/11] misc: syslog: Fix indentation and style Adhemerval Zanella
2021-04-12 21:11 ` [PATCH 04/11] misc: syslog: Use bool for connected Adhemerval Zanella
2021-04-14 14:54   ` Andreas Schwab
2021-04-12 21:11 ` Adhemerval Zanella [this message]
2021-04-14 14:57   ` [PATCH 05/11] misc: syslog: Assume MSG_NOSIGNAL support (BZ #17144) Andreas Schwab
2021-04-12 21:11 ` [PATCH 06/11] misc: syslog: Simplify implementation Adhemerval Zanella
2021-04-12 21:11 ` [PATCH 07/11] misc: syslog: Use static buffer Adhemerval Zanella
2021-04-12 21:11 ` [PATCH 08/11] misc: syslog: Use CLOC_EXEC with _PATH_CONSOLE (BZ #17145) Adhemerval Zanella
2021-04-14 15:00   ` Andreas Schwab
2021-04-12 21:11 ` [PATCH 09/11] misc: syslog: Use static const for AF_UNIX address Adhemerval Zanella
2021-04-14 15:03   ` Andreas Schwab
2021-04-12 21:11 ` [PATCH 10/11] misc: syslog: Move SYSLOG_NAME to USE_MISC (BZ #16355) Adhemerval Zanella
2021-04-12 21:11 ` [PATCH 11/11] misc: syslog: Use RFC5424 Adhemerval Zanella

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210412211113.393120-5-adhemerval.zanella@linaro.org \
    --to=adhemerval.zanella@linaro.org \
    --cc=libc-alpha@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).