<div class="gmail_quote">On Fri, Dec 18, 2009 at 8:01 AM, Robert Dodier <span dir="ltr"><<a href="mailto:robert.dodier@gmail.com">robert.dodier@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
On 12/17/09, Juan Jose Garcia-Ripoll<br>
<div class="im"><<a href="mailto:juanjose.garciaripoll@googlemail.com">juanjose.garciaripoll@googlemail.com</a>> wrote:<br>
> On Wed, Dec 16, 2009 at 6:14 AM, Robert Dodier<br>
<br>
</div><div class="im">> An unfortunate mistake: DIRECTORY used stat() on all entries in a directory,<br>
> not only those that matched the mask. It was just a matter of switching<br>
> lines. Now things are better. Thanks a lot for reporting.<br>
<br>
> $ echo '(directory "/Users/jjgarcia/tmp/")(quit)' > foo.lsp; sudo dtrace -n<br>
> 'pid$target::safe_stat:entry  { printf("%s\n", copyinstr((uintptr_t)arg0));<br>
> }' -c "ecl -norc -load foo"<br>
> dtrace: description 'pid$target::safe_stat:entry  ' matched 1 probe<br>
> ;;; Loading #P"/Users/jjgarcia/foo.lsp"<br>
> dtrace: pid 39532 has exited<br>
> CPU     ID                    FUNCTION:NAME<br>
>   0  19180                  safe_stat:entry jjgarcia<br>
>   0  19180                  safe_stat:entry tmp<br>
<br>
</div>Hmm. I updated from CVS and I got r1.100 src/d/unixfsys.d<br>
which has the modified code. I did a clean build,<br>
but I get the same behavior as before.<br></blockquote><div><br></div><div>No, you are not seeing the same behavior as before. Before, if ECL wanted to list a directory of /var/tmp/foo/a.txt it would run through the directory chain "stat-ing" the content of /var, /tmp and /foo Now it only does what is expected: it lists the content of each directory, and only inspect those that match the masks "var", "tmp", "foo" and "a.txt" There are thus only a few calls to "stat" which HAVE to be done: "var", "tmp", "foo" have to be verified not to be files, and for "a.txt" we have to verify it is not a symbolic link or return its true name.</div>
<div><br></div><div>Before thet patch</div><div><br></div><div>$ trace ecl -eval '(directory "/home/jjgarcia/mtp/foo")' -eval '(quit)' 2>&1 |tee ~/log</div><div>$ grep stat log |wc -l</div>
<div>162</div><div><br></div><div>After the patch</div><div><br></div><div><div>$ trace ecl -eval '(directory "/home/jjgarcia/mtp/foo")' -eval '(quit)' 2>&1 |tee ~/log2</div><div>$ grep stat log2 |wc -l</div>
<div>64</div><div><br></div></div><div>More precisely</div><div><br></div><div>[... stat due to system loading libraries ...]</div><div><div>fstat(4, {st_mode=S_IFREG|0755, st_size=411898, ...}) = 0</div><div>lstat("/home/jjgarcia/", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0</div>
<div>stat("home", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0</div><div>stat("jjgarcia", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0</div><div>stat("mtp", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0</div>
<div>stat("foo", {st_mode=S_IFREG|0644, st_size=0, ...}) = 0</div><div>lstat("foo", {st_mode=S_IFREG|0644, st_size=0, ...}) = 0</div><div><br></div></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

For the record, I'm looking at the output of strace,<br>
not dtrace, which appears to be something else.<br></blockquote><div><br></div><div>There is no strace in OS X. dtrace does the same and more: it allows you to select which calls to log. But I used "strace" in another box to show this works.</div>
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
I don't know what safe_stat is; I'm guessing it is a library<br>
function instead of a system call and, therefore,<br>
not immediately relevant. (I'm interested in the calls to stat64.)</blockquote><div><br></div><div>Please do not assume I am a fool by default. safe_stat() is a wrapper around stat() that captures any error condition, similarly there is safe_lstat() and other wrappers.</div>
<div><br></div><div>Juanjo</div></div><br>-- <br>Instituto de Física Fundamental, CSIC<br>c/ Serrano, 113b, Madrid 28006 (Spain) <br><a href="http://juanjose.garciaripoll.googlepages.com">http://juanjose.garciaripoll.googlepages.com</a><br>