From: Denis Vlasenko Date: Sat, 19 Apr 2008 20:19:45 +0000 (-0000) Subject: start_stop_daemon: do not stop /proc scan prematurely X-Git-Tag: 1_11_0~319 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=daeddee442e1cd7be15da6be472a637b8547fde7;p=oweals%2Fbusybox.git start_stop_daemon: do not stop /proc scan prematurely function old new delta do_procinit 185 196 +11 --- diff --git a/debianutils/start_stop_daemon.c b/debianutils/start_stop_daemon.c index 2f8e04a78..b6b30e7cc 100644 --- a/debianutils/start_stop_daemon.c +++ b/debianutils/start_stop_daemon.c @@ -145,11 +145,18 @@ static void do_procinit(void) procdir = xopendir("/proc"); pid = 0; - while ((entry = readdir(procdir)) != NULL) { - pid = bb_strtou(entry->d_name, NULL, 10); - if (errno) - continue; - check(pid); + while(1) { + errno = 0; /* clear any previous error */ + entry = readdir(procdir); +// TODO: check for exact errno(s) which mean that we got stale entry + if (errno) /* Stale entry, process has died after opendir */ + continue; + if (!entry) /* EOF, no more entries */ + break; + pid = bb_strtou(entry->d_name, NULL, 10); + if (errno) /* NaN */ + continue; + check(pid); } closedir(procdir); if (!pid)