From: Subrata M. <su...@li...> - 2007-11-13 09:28:46
|
True. And this also has been taken care of. --Subrata-- On Tue, 2007-11-13 at 13:33 +0800, Cai Qian wrote: > Hi, > > The test case attempts to read all /proc/<pid> directories. However, > processes may disappear during the test, so we have seen errors like > this, > > /proc/2143: lstat: No such file or directory > > It can happen like this, just after readdir(2) got the name of the > directory 2143, the process 2143 may be terminated. In addition, there > are windows among lstat(2), open(2), and read(2) for this failure to > happen too. > > Also, it is inefficient to read all /proc/<pid> directories, which are > identical structures. > > The following patch skip read of all /proc/<pid> directories except > /proc/self. Therefore, it make sure that at least one /proc/<pid> has > been read, and also the directory will stay as long as the life time of > the test. > > Regards, > CQ > > plain text document attachment (skip_pid.patch) > --- testcases/kernel/fs/proc/proc01.c.p1 2007-11-13 12:35:59.000000000 +0800 > +++ testcases/kernel/fs/proc/proc01.c 2007-11-13 12:57:43.000000000 +0800 > @@ -34,6 +34,7 @@ > #include <dirent.h> /* for opendir(), readdir(), closedir() */ > #include <unistd.h> > #include <fcntl.h> > +#include <fnmatch.h> > > #include "test.h" > #include "usctest.h" > @@ -51,6 +52,7 @@ > static char *opt_buffsizestr; > > static char *procpath = "/proc"; > +static char selfpath[] = "/proc/self"; > size_t buffsize = 1024; > > /* FIXME: would it overflow on 32bits systems with >4Go RAM (HIGHMEM) ? */ > @@ -142,14 +144,14 @@ > return 0; > } > > - /* prevent loops .. */ > - if (S_ISLNK(statbuf.st_mode)) > + /* prevent loops, but read /proc/self. */ > + if (S_ISLNK(statbuf.st_mode) && strcmp(obj, selfpath)) > return 0; > > total_obj++; > > /* Take appropriate action, depending on the file type */ > - if (S_ISDIR(statbuf.st_mode)) { > + if (S_ISDIR(statbuf.st_mode) || !strcmp(obj, selfpath)) { > /* object is a directory */ > > /* Open the directory to get access to what is in it */ > @@ -166,10 +168,12 @@ > for (dir_ent = (struct dirent *)readdir(dir); > dir_ent != NULL; dir_ent = (struct dirent *)readdir(dir)) { > > - /* Ignore "." or ".." */ > + /* Ignore ".", "..", "kcore", and "/proc/<pid>". */ > if (!strcmp(dir_ent->d_name, ".") > || !strcmp(dir_ent->d_name, "..") > - || !strcmp(dir_ent->d_name, "kcore")) > + || !strcmp(dir_ent->d_name, "kcore") > + || (!fnmatch("[0-9]*", dir_ent->d_name, FNM_PATHNAME) > + && !strcmp(obj, procpath))) > continue; > > if (opt_verbose) > ------------------------------------------------------------------------- > This SF.net email is sponsored by: Splunk Inc. > Still grepping through log files to find problems? Stop. > Now Search log events and configuration files using AJAX and a browser. > Download your FREE copy of Splunk now >> http://get.splunk.com/ > _______________________________________________ Ltp-list mailing list Ltp...@li... https://lists.sourceforge.net/lists/listinfo/ltp-list |