about summary refs log tree commit diff
path: root/misc
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2001-08-28 04:52:25 +0000
committerUlrich Drepper <drepper@redhat.com>2001-08-28 04:52:25 +0000
commitc06a49c551ebfc7f320a05546b5a013714ac82e5 (patch)
tree99a3e7af0141dfca57cf119bb094b14cfe226af5 /misc
parent497b760b341c38565531e964a33eec0eec343be5 (diff)
downloadglibc-c06a49c551ebfc7f320a05546b5a013714ac82e5.tar.gz
glibc-c06a49c551ebfc7f320a05546b5a013714ac82e5.tar.xz
glibc-c06a49c551ebfc7f320a05546b5a013714ac82e5.zip
Update.
2001-08-27  Ulrich Drepper  <drepper@redhat.com>

	* misc/syslog.c (vsyslog): Try a bit harder to use syslogd.  If
	the connection went down after we first used it try to connect
	again and resend the message before printing to the console.
	Reported by Coserea Gh. Tudor <tudore@tudore.gecadsoftware.com>.

2001-08-27  Jakub Jelinek  <jakub@redhat.com>

	* string/tst-strlen.c (main): Test strnlen (, -1) too.
	* sysdeps/generic/strnlen.c (__strnlen): Fix for maxlens with top
	bit set.

2001-08-27  Ulrich Drepper  <drepper@redhat.com>

	* iconv/strtab.c (searchstring): Use correct length for
	comparison.
	(strtabadd): Account total size correct if new string has old string as
	substring.
Diffstat (limited to 'misc')
-rw-r--r--misc/syslog.c32
1 files changed, 22 insertions, 10 deletions
diff --git a/misc/syslog.c b/misc/syslog.c
index 9553c296ea..58f81996aa 100644
--- a/misc/syslog.c
+++ b/misc/syslog.c
@@ -239,17 +239,29 @@ vsyslog(pri, fmt, ap)
 
 	if (!connected || __send(LogFile, buf, bufsize, 0) < 0)
 	  {
-	    closelog_internal ();	/* attempt re-open next time */
-	    /*
-	     * Output the message to the console; don't worry about blocking,
-	     * if console blocks everything will.  Make sure the error reported
-	     * is the one from the syslogd failure.
-	     */
-	    if (LogStat & LOG_CONS &&
-		(fd = __open(_PATH_CONSOLE, O_WRONLY|O_NOCTTY, 0)) >= 0)
+	    if (connected)
 	      {
-		dprintf (fd, "%s\r\n", buf + msgoff);
-		(void)__close(fd);
+		/* Try to reopen the syslog connection.  Maybe it went
+		   down.  */
+		closelog_internal ();
+		openlog_internal(LogTag, LogStat | LOG_NDELAY, 0);
+	      }
+
+	    if (!connect || __send(LogFile, buf, bufsize, 0) < 0)
+	      {
+		closelog_internal ();	/* attempt re-open next time */
+		/*
+		 * Output the message to the console; don't worry
+		 * about blocking, if console blocks everything will.
+		 * Make sure the error reported is the one from the
+		 * syslogd failure.
+		 */
+		if (LogStat & LOG_CONS &&
+		    (fd = __open(_PATH_CONSOLE, O_WRONLY|O_NOCTTY, 0)) >= 0)
+		  {
+		    dprintf (fd, "%s\r\n", buf + msgoff);
+		    (void)__close(fd);
+		  }
 	      }
 	  }