Hello community,
here is the log from the commit of package sysvinit for openSUSE:Factory
checked in at Tue Aug 2 08:55:35 CEST 2011.
--------
--- sysvinit/sysvinit.changes 2011-07-27 15:22:47.000000000 +0200
+++ /mounts/work_src_done/STABLE/sysvinit/sysvinit.changes 2011-08-01 16:48:32.000000000 +0200
@@ -1,0 +2,7 @@
+Mon Aug 1 14:25:56 UTC 2011 - werner@suse.de
+
+- libblogger: check for SIGPIPE and block SIGPIPE during write, this
+ also does help startpar not to die on SIGPIPE (bnc#679671)
+- blogd: add a further check for nsigsys in writelog() (bnc#679671)
+
+-------------------------------------------------------------------
calling whatdependson for head-i586
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ sysvinit.spec ++++++
--- /var/tmp/diff_new_pack.ltEFC2/_old 2011-08-02 08:50:17.000000000 +0200
+++ /var/tmp/diff_new_pack.ltEFC2/_new 2011-08-02 08:50:17.000000000 +0200
@@ -29,7 +29,7 @@
Group: System/Base
AutoReqProv: on
Version: 2.88+
-Release: 56
+Release: 58
Summary: SysV-Style init
BuildRoot: %{_tmppath}/%{name}-%{version}-build
BuildRequires: audit-devel libselinux-devel libsepol-devel pam-devel
++++++ showconsole-1.14.dif ++++++
--- /var/tmp/diff_new_pack.ltEFC2/_old 2011-08-02 08:50:17.000000000 +0200
+++ /var/tmp/diff_new_pack.ltEFC2/_new 2011-08-02 08:50:17.000000000 +0200
@@ -170,8 +170,123 @@
.SH FILES
.TP
.I /dev/console
+--- libblogger.c
++++ libblogger.c 2011-08-01 14:32:47.599926864 +0000
+@@ -15,6 +15,7 @@
+ #include
+ #include
+ #include
++#include
+ #include
+ #include
+ #include
+@@ -40,9 +41,58 @@
+ #define ESNS "skipped" /* Skipped */
+ #define ESNU "unused" /* Unused */
+
++static struct sigaction saved_sigpipe;
++static volatile sig_atomic_t broken = 0;
+ static int fdfifo = -1;
+ static char * fifo_name = _PATH_BLOG_FIFO;
+
++static void sigpipe(int sig __attribute__((__unused__)))
++{
++ broken++;
++}
++
++static void set_signal(int sig, struct sigaction *old, sighandler_t handler)
++{
++ do {
++ if (sigaction(sig, NULL, old) == 0)
++ break;
++ } while (errno == EINTR);
++
++ if (old && old->sa_handler != handler) {
++ struct sigaction new;
++ sigset_t sigset;
++
++ new.sa_handler = handler;
++ sigemptyset(&new.sa_mask);
++ new.sa_flags = SA_RESTART;
++ do {
++ if (sigaction(sig, &new, NULL) == 0)
++ break;
++ } while (errno == EINTR);
++
++ sigemptyset(&sigset);
++ sigaddset(&sigset, sig);
++ sigprocmask(SIG_UNBLOCK, &sigset, NULL);
++ }
++}
++
++static void reset_signal(int sig, struct sigaction *old)
++{
++ struct sigaction cur;
++
++ do {
++ if (sigaction(sig, NULL, &cur) == 0)
++ break;
++ } while (errno == EINTR);
++
++ if (old && old->sa_handler == cur.sa_handler) {
++ do {
++ if (sigaction(sig, old, NULL) == 0)
++ break;
++ } while (errno == EINTR);
++ }
++}
++
+ static int bootlog_init(const int lvl __attribute__((__unused__)))
+ {
+ int ret = -1;
+@@ -57,6 +107,8 @@ static int bootlog_init(const int lvl __
+ if ((fdfifo = open(fifo_name, O_WRONLY|O_NONBLOCK|O_NOCTTY|O_CLOEXEC)) < 0)
+ goto out;
+
++ set_signal(SIGPIPE, &saved_sigpipe, sigpipe);
++
+ ret = 0;
+ out:
+ return ret;
+@@ -66,6 +118,9 @@ void closeblog()
+ {
+ if (fdfifo < 0)
+ goto out;
++
++ reset_signal(SIGPIPE, &saved_sigpipe);
++
+ (void)close(fdfifo);
+ out:
+ return;
+@@ -77,6 +132,7 @@ int bootlog(const int lvl, const char *f
+ int ret = -1;
+ char * head = ESNN;
+ char buf[4096];
++ sigset_t blockpipe, oldpipe;
+
+ if (fdfifo < 0 && bootlog_init(lvl) < 0)
+ goto out;
+@@ -106,6 +162,9 @@ int bootlog(const int lvl, const char *f
+ break;
+ }
+
++ sigprocmask(SIG_BLOCK, &blockpipe, &oldpipe);
++ if (broken)
++ goto pipe;
+ if (head) {
+ const struct tm *local;
+ struct timeval now;
+@@ -124,6 +183,8 @@ int bootlog(const int lvl, const char *f
+ vsnprintf(buf, sizeof(buf), fmt, ap);
+ va_end(ap);
+ write(fdfifo, buf, strlen(buf));
++pipe:
++ sigprocmask(SIG_SETMASK, &oldpipe, NULL);
+ out:
+ return ret;
+ }
--- libconsole.c
-+++ libconsole.c 2011-04-20 11:13:46.815926166 +0000
++++ libconsole.c 2011-08-01 14:00:51.311926463 +0000
@@ -59,6 +59,27 @@
#include "listing.h"
@@ -345,11 +460,13 @@
clearerr(flog);
lock(&llock);
while (avail > 0) {
-@@ -412,7 +440,7 @@ static inline void writelog(void)
+@@ -411,8 +439,8 @@ static inline void writelog(void)
+ if (avail > TRANS_BUFFER_SIZE)
ret = TRANS_BUFFER_SIZE;
- if (!flog)
+- if (!flog)
- goto xout;;
++ if (!flog || nsigsys)
+ break;
ret = fwrite(head, sizeof(unsigned char), ret, flog);
if (!ret && ferror(flog))
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Remember to have fun...
--
To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org
For additional commands, e-mail: opensuse-commit+help@opensuse.org