<div dir="ltr"><div><div><div><div><div><div>Thanks Raimund for looking into this!<br><br></div>There are four usecases we need to consider:<br><br></div>  - Normal Linux / other Unix-like.  We can assume high-precision timestamps are available and take care of stuff,<br><br></div>  - Linux / Unix-like system with network file system.  Any issues there with your proposed patch?<br><br></div>  - Linux / Unix-like system with FAT or other low-precision timestamp file system.  Do we care much about that?  I believe we've fixed bugs for those systems before.  I just am not sure how much we care about small races there.<br><br></div>  - Windows.  I'm fine with leaving some known races there alone.<br><br><br></div>behdad<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Sun, Mar 13, 2016 at 1:12 PM, Raimund Steger <span dir="ltr"><<a href="mailto:rs@mytum.de" target="_blank">rs@mytum.de</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On Fri, 11 Mar 2016 19:16:57 +0900<br>
Akira TAGOH <<a href="mailto:akira@tagoh.org">akira@tagoh.org</a>> wrote:<br>
<br>
> f44bfad2 could be reverted perhaps but need to test carefully before<br>
> doing that. unfortunately I don't have a time to do that so far.<br>
<br>
</span>I think that might be a good idea. I've now read the linked Fedora bug again [1] and as far as I understand (with only little insight in Fedora's history with this problem):<br>
<br>
The race condition surfaced when installing urw-fonts as part of an enblend (or similar tools, in terms of dependencies) build, in that the .../Type1 directory cache somehow had an inadequate timestamp after postinstall. This was attributed to parallel invocations of fontconfig's caching routines.<br>
<br>
Now I've looked at the dependencies of enblend. Indeed I see some stuff that might pull other fonts in, for example gnuplot which depends on DejaVu fonts. Nowadays this probably doesn't take too long so all of it could really take place within seconds.<br>
<br>
I've also downloaded the attached test case and linked it with fontconfig-2.9.0, 2.10.0, and 2.11.9x (current Git). Indeed, with all earlier versions (than 2.11.9x) I can see the problem; the file 01.pcf, which is added while the other stuff is scanned, isn't picked up.<br>
<br>
However, if I check the mtimes in /tmp I see that everything happens in the same second:<br>
<br>
<br>
sun2:fontconfig)ls -E /tmp/fcbz69845-fonts-XXgyaO2j<br>
total 216<br>
drwxr-xr-x   2 rs       rs01         179 2016-03-13 20:42:25.286523696 +0100 0/<br>
drwxr-xr-x   2 rs       rs01         180 2016-03-13 20:42:25.331396817 +0100 01/<br>
drwxr-xr-x   2 rs       rs01         179 2016-03-13 20:42:25.286844908 +0100 1/<br>
drwxr-xr-x   2 rs       rs01         180 2016-03-13 20:42:25.288598316 +0100 10/<br>
drwxr-xr-x   2 rs       rs01         180 2016-03-13 20:42:25.288793584 +0100 11/<br>
drwxr-xr-x   2 rs       rs01         180 2016-03-13 20:42:25.288986704 +0100 12/<br>
drwxr-xr-x   2 rs       rs01         180 2016-03-13 20:42:25.289179054 +0100 13/<br>
drwxr-xr-x   2 rs       rs01         180 2016-03-13 20:42:25.289372500 +0100 14/<br>
drwxr-xr-x   2 rs       rs01         180 2016-03-13 20:42:25.289566288 +0100 15/<br>
drwxr-xr-x   2 rs       rs01         180 2016-03-13 20:42:25.289756148 +0100 16/<br>
drwxr-xr-x   2 rs       rs01         180 2016-03-13 20:42:25.289947012 +0100 17/<br>
drwxr-xr-x   2 rs       rs01         180 2016-03-13 20:42:25.290156261 +0100 18/<br>
drwxr-xr-x   2 rs       rs01         180 2016-03-13 20:42:25.290349106 +0100 19/<br>
drwxr-xr-x   2 rs       rs01         179 2016-03-13 20:42:25.287043469 +0100 2/<br>
drwxr-xr-x   2 rs       rs01         180 2016-03-13 20:42:25.290539282 +0100 20/<br>
drwxr-xr-x   2 rs       rs01         180 2016-03-13 20:42:25.290731146 +0100 21/<br>
drwxr-xr-x   2 rs       rs01         180 2016-03-13 20:42:25.290920807 +0100 22/<br>
drwxr-xr-x   2 rs       rs01         180 2016-03-13 20:42:25.291111970 +0100 23/<br>
drwxr-xr-x   2 rs       rs01         180 2016-03-13 20:42:25.291304851 +0100 24/<br>
drwxr-xr-x   2 rs       rs01         180 2016-03-13 20:42:25.291496406 +0100 25/<br>
drwxr-xr-x   2 rs       rs01         179 2016-03-13 20:42:25.287238447 +0100 3/<br>
drwxr-xr-x   2 rs       rs01         179 2016-03-13 20:42:25.287432511 +0100 4/<br>
drwxr-xr-x   2 rs       rs01         179 2016-03-13 20:42:25.287626802 +0100 5/<br>
drwxr-xr-x   2 rs       rs01         179 2016-03-13 20:42:25.287820816 +0100 6/<br>
drwxr-xr-x   2 rs       rs01         179 2016-03-13 20:42:25.288018928 +0100 7/<br>
drwxr-xr-x   2 rs       rs01         179 2016-03-13 20:42:25.288210736 +0100 8/<br>
drwxr-xr-x   2 rs       rs01         179 2016-03-13 20:42:25.288402321 +0100 9/<br>
<br>
<br>
I then tried to revert f44bfad2 and also the FcDirCacheLock/Unlock part of ad9f5880502c9a3f8e7f8919336888ee056f17ba (attached) and tried the test again. The latter is because I have the feeling it's not strictly required either. The cache files have their individual locking and even if the dir isn't locked, as Keith argued (and I can find no flaw there) any later fc-cache /will/ pick the stuff up.<br>
<br>
Now I see that whenever I also remove the nanosecond stuff, the test fails. When I leave it in, it works.<br>
<br>
Of course that's no extensive testing or anything. But it might just be that the finer mtime is now good enough.<br>
<br>
Raimund<br>
<br>
<br>
<br>
[1] <a href="https://bugzilla.redhat.com/show_bug.cgi?id=921706" rel="noreferrer" target="_blank">https://bugzilla.redhat.com/show_bug.cgi?id=921706</a><br>
<div><div class="h5"><br>
<br>
<br>
<br>
<br>
<br>
<br>
><br>
> On Fri, Mar 11, 2016 at 8:26 AM, Behdad Esfahbod <<a href="mailto:behdad@behdad.org">behdad@behdad.org</a>> wrote:<br>
> > Any resolution here?  Current master's behavior of stating all fonts is<br>
> > definitely very bad.  Anyone volunteer to clean up the cache code a bit?<br>
> ><br>
> > On Mon, Jan 18, 2016 at 7:09 PM, Akira TAGOH <<a href="mailto:akira@tagoh.org">akira@tagoh.org</a>> wrote:<br>
> >><br>
> >> On Mon, Jan 18, 2016 at 5:54 PM, Keith Packard <<a href="mailto:keithp@keithp.com">keithp@keithp.com</a>> wrote:<br>
> >> > Akira TAGOH <<a href="mailto:akira@tagoh.org">akira@tagoh.org</a>> writes:<br>
> >> ><br>
> >> >> Not exactly. fontconfig doesn't stat everey directory at runtime but<br>
> >> >> relies on the subdir list in the cache to traverse. so if it isn't<br>
> >> >> outdated and missing some, it won't be picked up by fontconfig.<br>
> >> ><br>
> >> > How can it "miss some" if it checks the timestamp of the parent before<br>
> >> > relying on the list?<br>
> >><br>
> >> Previously fontconfig only locks the file when writing out. the time<br>
> >> to write it out since bringing up fc-cache depends on the time of<br>
> >> collecting data and it takes more time if there are more targeted<br>
> >> files and directories. and likely to see a process finished first<br>
> >> which brought up later.<br>
> >> so I locked out between reading and writing to avoid it.<br>
> >><br>
> >> >> Not sure but perhaps it is. my memory is already vague and not sure if<br>
> >> >> it had a nano second in the mtime. so better testing anyway.<br>
> >> ><br>
> >> > Hrm. Is fontconfig even using the higher resolution time when the file<br>
> >> > system supports it?<br>
> >><br>
> >> Yes. well, very recently. not yet included in any releases.<br>
> >><br>
> >> --<br>
> >> Akira TAGOH<br>
> >> _______________________________________________<br>
> >> Fontconfig mailing list<br>
> >> <a href="mailto:Fontconfig@lists.freedesktop.org">Fontconfig@lists.freedesktop.org</a><br>
> >> <a href="http://lists.freedesktop.org/mailman/listinfo/fontconfig" rel="noreferrer" target="_blank">http://lists.freedesktop.org/mailman/listinfo/fontconfig</a><br>
> ><br>
> ><br>
> ><br>
> ><br>
> > --<br>
> > behdad<br>
> > <a href="http://behdad.org/" rel="noreferrer" target="_blank">http://behdad.org/</a><br>
><br>
><br>
><br>
> --<br>
> Akira TAGOH<br>
> _______________________________________________<br>
> Fontconfig mailing list<br>
> <a href="mailto:Fontconfig@lists.freedesktop.org">Fontconfig@lists.freedesktop.org</a><br>
</div></div>> <a href="https://lists.freedesktop.org/mailman/listinfo/fontconfig" rel="noreferrer" target="_blank">https://lists.freedesktop.org/mailman/listinfo/fontconfig</a><br>
<div class="HOEnZb"><div class="h5"><br>
<br>
--<br>
Worringer Str 31 Duesseldorf 40211 DE  home: <a href="mailto:rs@mytum.de">rs@mytum.de</a><br>
<a href="tel:%2B49-179-2981632" value="+491792981632">+49-179-2981632</a> icq 16845346           work: <a href="mailto:rs@interface-ag.de">rs@interface-ag.de</a><br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br><div class="gmail_signature">behdad<br><a href="http://behdad.org/" target="_blank">http://behdad.org/</a></div>
</div>