Update.
authorUlrich Drepper <drepper@redhat.com>
Thu, 23 Sep 2004 04:45:09 +0000 (04:45 +0000)
committerUlrich Drepper <drepper@redhat.com>
Thu, 23 Sep 2004 04:45:09 +0000 (04:45 +0000)
* malloc/malloc.c (malloc_printerr): Use syslog if writev failed.

ChangeLog
malloc/malloc.c

index 027a8c5..a23d0a1 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,7 @@
 2004-09-22  Ulrich Drepper  <drepper@redhat.com>
 
+       * malloc/malloc.c (malloc_printerr): Use syslog if writev failed.
+
        * string/string.h: Add __nonnull annotations.
        * stdlib/stdlib.h: Likewise.
 
index 665d7a4..dcc54c4 100644 (file)
@@ -285,6 +285,8 @@ extern "C" {
 
 /* For writev and struct iovec.  */
 #include <sys/uio.h>
+  /* For syslog.  */
+#include <sys/syslog.h>
 
 /*
   Debugging:
@@ -5467,7 +5469,12 @@ malloc_printerr(int action, const char *str, void *ptr)
       iov[n].iov_base = cp;
       iov[n].iov_len = &buf[sizeof (buf) - 1] - cp;
       ++n;
-      TEMP_FAILURE_RETRY (__writev (STDERR_FILENO, iov, n));
+      if (TEMP_FAILURE_RETRY (__writev (STDERR_FILENO, iov, n)) == -1
+         && errno == EBADF)
+       /* Standard error is not opened.  Try using syslog.  */
+       syslog (LOG_ERR, "%s%s%s", (char *) iov[0].iov_base,
+               (char *) iov[1].iov_base,
+               n == 3 ? (const char *) iov[2].iov_base : "");
     }
   if (action & 2)
     abort ();