![](https://seccdn.libravatar.org/avatar/e2145bc5cf53dda95c308a3c75e8fef3.jpg?s=120&d=mm&r=g)
Hello community, here is the log from the commit of package sysvinit checked in at Fri May 11 15:39:40 CEST 2007. -------- --- sysvinit/sysvinit.changes 2007-04-19 13:46:56.000000000 +0200 +++ /mounts/work_src_done/STABLE/sysvinit/sysvinit.changes 2007-05-11 12:11:27.389526000 +0200 @@ -1,0 +2,6 @@ +Fri May 11 12:10:18 CEST 2007 - werner@suse.de + +- startpar: Try to start more processes even on high loaded systems +- startpar: Detect endless loops on broken systems (no SIGCHILD) + +------------------------------------------------------------------- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ sysvinit.spec ++++++ --- /var/tmp/diff_new_pack.x28922/_old 2007-05-11 15:37:58.000000000 +0200 +++ /var/tmp/diff_new_pack.x28922/_new 2007-05-11 15:37:58.000000000 +0200 @@ -22,7 +22,7 @@ PreReq: coreutils Autoreqprov: on Version: 2.86 -Release: 61 +Release: 67 Summary: SysV-Style init BuildRoot: %{_tmppath}/%{name}-%{version}-build Source: sysvinit-2.86.tar.bz2 @@ -280,6 +280,9 @@ %doc %{_mandir}/man8/startpar.8.gz %changelog +* Fri May 11 2007 - werner@suse.de +- startpar: Try to start more processes even on high loaded systems +- startpar: Detect endless loops on broken systems (no SIGCHILD) * Thu Apr 19 2007 - werner@suse.de - Correct exit status of checkproc n case of using a pid file, thanks to Alessandro Soraruf ++++++ startpar-0.49.dif ++++++ --- /var/tmp/diff_new_pack.x28922/_old 2007-05-11 15:37:59.000000000 +0200 +++ /var/tmp/diff_new_pack.x28922/_new 2007-05-11 15:37:59.000000000 +0200 @@ -1,6 +1,6 @@ --- Makefile +++ Makefile 2006-05-16 17:16:01.000000000 +0200 -@@ -21,7 +21,7 @@ +@@ -21,7 +21,7 @@ startpar: $(OBJS) install: startpar $(INSTALL) -d $(DESTDIR)$(sbindir) $(DESTDIR)$(man8dir) @@ -11,7 +11,7 @@ clean: --- proc.c +++ proc.c 2006-05-16 18:10:47.000000000 +0200 -@@ -45,30 +45,29 @@ +@@ -45,30 +45,29 @@ static unsigned long int scan_one(const int read_proc(unsigned long int * const prcs_run, unsigned long int * const prcs_blked) { @@ -56,8 +56,8 @@ running = scan_one(StatBuf, "procs_running"); blocked = scan_one(StatBuf, "procs_blocked"); --- startpar.c -+++ startpar.c 2006-05-16 17:16:01.000000000 +0200 -@@ -127,6 +127,19 @@ ++++ startpar.c 2007-05-11 12:07:21.215446308 +0200 +@@ -127,6 +127,19 @@ void waitsplash() splashpid = 0; } @@ -77,7 +77,7 @@ void callsplash(int n, char *path, char *action) { char *p; -@@ -169,24 +182,11 @@ +@@ -169,24 +182,11 @@ void callsplash(int n, char *path, char } close(1); dup(2); @@ -103,7 +103,7 @@ void writebuf(struct prg *p) { char *b = p->buf; -@@ -360,6 +360,7 @@ +@@ -360,6 +360,7 @@ int run_single(char *prg, int spl) close(1); dup(2); @@ -111,3 +111,103 @@ if (run_mode) { char path[128]; +@@ -510,6 +511,7 @@ void usage(int status) + + int main(int argc, char **argv) + { ++ volatile int broken; + int timo = -1; + int gtimo = -1; + int r, c, i, s, last, num; +@@ -706,6 +708,7 @@ int main(int argc, char **argv) + exit(1); + } + ++ broken = 0; /* Detect broken hardware */ + gettimeofday(&glastio, 0); + limit = checklimit(inpar, (run_mode) ? run_mode : "stop"); + lastlim.tv_sec = glastio.tv_sec; +@@ -721,6 +724,7 @@ int main(int argc, char **argv) + last = -1; + maxfd = -1; + active = 0; ++ pid = 0; + + diff = ((now.tv_sec - lastlim.tv_sec) * 1000) + + ((now.tv_usec - lastlim.tv_usec)/ 1000); +@@ -795,8 +799,7 @@ int main(int argc, char **argv) + + } /* for (s = 0; s < par; s++) */ + +- if (s < limit && num < argc) +- continue; /* start new processes */ ++ broken++; /* no endless loops due broken systems */ + + if (interactive_task) + { +@@ -809,9 +812,14 @@ int main(int argc, char **argv) + p->pid = 0; + p->fd = 0; + interactive_task = NULL; ++ broken = 0; /* run_single() uses waitpid() */ + continue; + } + } ++ ++ if ((active < limit) && (num < argc) && (broken < argc)) ++ continue; /* try to start new processes */ ++ + if (active == 0) + { + if (num < argc) +@@ -828,16 +836,25 @@ int main(int argc, char **argv) + if (active == 1 && last >= 0) + { + p = prgs + last; +- writebuf(p); +- continue; ++ if ((pid = waitpid(p->pid, &r, maxfd < 0 ? 0 : WNOHANG)) == 0) ++ { ++ writebuf(p); ++ continue; ++ } ++ broken = 0; + } + + FD_SET(pidpipe[0], &rset); + /* drain the pidpipe */ +- while ((r = read(pidpipe[0], pipebuf, sizeof pipebuf)) > 0) ++ while ((c = read(pidpipe[0], pipebuf, sizeof pipebuf)) > 0) + ; + +- pid = waitpid(-1, &r, maxfd < 0 ? 0 : WNOHANG); ++ if (pid == 0) ++ { ++ pid = waitpid(-1, &r, maxfd < 0 ? 0 : WNOHANG); ++ broken = 0; ++ } ++ + if (pid > 0) + { + if (pid == splashpid) +@@ -874,7 +891,7 @@ int main(int argc, char **argv) + } + break; + } +- } ++ } /* for (s = 0; s < par; s++) */ + continue; + } + +@@ -993,9 +1010,9 @@ int main(int argc, char **argv) + } + p->lastio.tv_sec = now.tv_sec; + p->lastio.tv_usec = now.tv_usec; +- } ++ } /* for (s = 0; s < par; s++) */ + } +- } ++ } /* for (;;) */ + + finished: + waitsplash(); ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Remember to have fun... --------------------------------------------------------------------- To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-commit+help@opensuse.org
participants (1)
-
root@Hilbert.suse.de