<br><br><div class="gmail_quote">On Sat, Dec 19, 2009 at 7:55 PM, 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/18/09, Juan Jose Garcia-Ripoll<br>
<div class="im"><<a href="mailto:juanjose.garciaripoll@googlemail.com">juanjose.garciaripoll@googlemail.com</a>> wrote:<br>
<br>
</div><div class="im">> No, you are not seeing the same behavior as before. Before, if ECL wanted to<br>
> list a directory of /var/tmp/foo/a.txt it would run through the directory<br>
> chain "stat-ing" the content of /var, /tmp and /foo Now it only does what is<br>
> expected: it lists the content of each directory, and only inspect those<br>
> that match the masks "var", "tmp", "foo" and "a.txt" There are thus only a<br>
> few calls to "stat" which HAVE to be done: "var", "tmp", "foo" have to be<br>
> verified not to be files, and for "a.txt" we have to verify it is not a<br>
> symbolic link or return its true name.<br>
<br>
</div>OK, I tried it again, and I see a reduction in stat calls now;<br>
before the executable was linking to the previous libecl.so,<br>
so I didn't see any change.<br>
<br>
Some of the unneeded calls to stat have gone away, which<br>
is good. However there are still some unnecessary calls to stat,<br>
e.g. (directory (pathname "/var/tmp/foo")) stats everything<br>
in in /var/tmp and (directory (pathname "/var/tmp/foo/quux.1"))<br>
stats everything in /var/tmp/foo.<br></blockquote><div><br></div><div>Fixed in CVS. I used this chance to further unify the implementations of DIRECTORY and PATHNAME-MATCH-P. Will be conducting some automated tests tonight to ensure nothing else broke</div>
<div><br></div><div>A simple test follows. Given a directory with two files</div><div><br></div><div><div>$ ls -l mtp</div><div>total 0</div><div>-rw-r--r-- 1 jjgarcia jjgarcia 0 2009-12-20 00:16 foo</div><div>-rw-r--r-- 1 jjgarcia jjgarcia 0 2009-12-20 00:16 foo2</div>
<div><br></div></div><div>Before ECL would stat both</div><div><br></div><div>$ (strace ./tmp/intel64.all/bin/ecl -norc -eval '(directory "~/mtp/foo2")' -eval '(quit)') 2>&1 |grep stat</div>
<div>[...]</div><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>stat("foo2", {st_mode=S_IFREG|0644, st_size=0, ...}) = 0</div><div><br></div><div>With the latest fix it only stats the file that matches the mask</div>
<div><br></div></div><div>$ (strace ./tmp/intel64/bin/ecl -norc -eval '(directory "~/mtp/foo2")' -eval '(quit)') 2>&1 |grep stat</div><div>[...]</div><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("foo2", {st_mode=S_IFREG|0644, st_size=0, ...}) = 0</div>
</div></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>

</div>