This commit is contained in:
40
sysklogd-1.4.1-reopen.patch
Normal file
40
sysklogd-1.4.1-reopen.patch
Normal file
@@ -0,0 +1,40 @@
|
||||
#
|
||||
# Description: reconnects to log socket if a write fails with
|
||||
# ECONNREFUSED or ENOTCONN -- similar to reopen
|
||||
# in syslog routines provided by glibc.
|
||||
# Happens if the log socket (provided by syslog
|
||||
# daemon) has been reopened. Can be triggered by
|
||||
# "rcsyslog reload" while syslog-ng is used.
|
||||
# See also Bugzilla Bug #27971.
|
||||
#
|
||||
# Author: mt@suse.de
|
||||
#
|
||||
--- syslog.c
|
||||
+++ syslog.c 2003/08/26 11:34:34
|
||||
@@ -102,7 +102,7 @@
|
||||
register int cnt;
|
||||
register char *p;
|
||||
time_t now;
|
||||
- int fd, saved_errno;
|
||||
+ int fd, saved_errno, rc;
|
||||
char tbuf[2048], fmt_cpy[1024], *stdp = (char *) 0;
|
||||
|
||||
saved_errno = errno;
|
||||
@@ -172,7 +172,16 @@
|
||||
}
|
||||
|
||||
/* output the message to the local logger */
|
||||
- if (write(LogFile, tbuf, cnt + 1) >= 0 || !(LogStat&LOG_CONS))
|
||||
+ rc = write(LogFile, tbuf, cnt + 1);
|
||||
+ if(rc == -1 && connected && (ECONNREFUSED == errno ||
|
||||
+ ENOTCONN == errno)) {
|
||||
+ /* try to reopen and write again */
|
||||
+ closelog();
|
||||
+ openlog(LogTag, LogStat | LOG_NDELAY, LogFacility);
|
||||
+ if(connected)
|
||||
+ rc = write(LogFile, tbuf, cnt + 1);
|
||||
+ }
|
||||
+ if(rc >= 0 || !(LogStat&LOG_CONS))
|
||||
return;
|
||||
|
||||
/*
|
Reference in New Issue
Block a user