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)