From daeddee442e1cd7be15da6be472a637b8547fde7 Mon Sep 17 00:00:00 2001 From: Denis Vlasenko Date: Sat, 19 Apr 2008 20:19:45 +0000 Subject: start_stop_daemon: do not stop /proc scan prematurely function old new delta do_procinit 185 196 +11 --- debianutils/start_stop_daemon.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) (limited to 'debianutils') 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) -- cgit v1.2.3