aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog2
-rw-r--r--malloc/malloc.c9
2 files changed, 10 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 027a8c5975..a23d0a1c5f 100644
--- 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.
diff --git a/malloc/malloc.c b/malloc/malloc.c
index 665d7a4b3e..dcc54c46f1 100644
--- a/malloc/malloc.c
+++ b/malloc/malloc.c
@@ -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 ();