start_stop_daemon: do not stop /proc scan prematurely
No binary (build failed)
—
(log yok)
| @@ -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) | |