[ this analysis is has been superseded by bug #820658 I filed against make ]

Hi,

that bug made me curious.

On Sun, 10 Apr 2016 10:54:35 +0200 
=?UTF-8?B?TMOhc3psw7MgQsO2c3rDtnJtw6lueWkgKEdDUyk=?= <g...@debian.org> wrote:
> On Sun, Apr 10, 2016 at 8:51 AM, Tobias Frost <t...@debian.org> wrote:
> > Happened again :(
>  I'm out of ideas. :( Tried to reproduce it many-many times locally
> without success. Upstream gave a possible idea and possible fix - then
> I do step by step compilation of that part. It still fails randomly
> even if it's rare.
> May you have information on the kFreeBSD-386 buildd? CPU and memory,
> but its average load may be enough alone.

The (intersting part of the) diff between
 
[GOOD] 
https://buildd.debian.org/status/fetch.php?pkg=vice&arch=kfreebsd-i386&ver=2.4.dfsg%2B2.4.26-1&stamp=1458846545
[BAD]  
https://buildd.debian.org/status/fetch.php?pkg=vice&arch=kfreebsd-i386&ver=2.4.dfsg%2B2.4.26-1%2Bb1&stamp=1460088757

starts with 

@@ -2959,12 +2990,6 @@
        | sed -e '$s/\\$//') &gt; POTFILES-t \
     &amp;&amp; chmod a-w POTFILES-t \
     &amp;&amp; mv POTFILES-t POTFILES )
-cd .. \
-  &amp;&amp; CONFIG_FILES=po/Makefile.in CONFIG_HEADERS= \
-       /bin/sh ./config.status
-config.status: creating po/Makefile.in
-config.status: executing depfiles commands
-config.status: executing default-1 commands
 make[2]: 'intl2po' is up to date.
 make[2]: Leaving directory '/«BUILDDIR»/vice-2.4.dfsg+2.4.26/po'
 /usr/bin/make trans-update -C po/

So po/POTFILES has been updated, but po/Makefile has not been regenerated, 
causing the future breakage due to an empty POTFILES variable.
For some reason make thinks that po/Makefile does not need to be regenerated.

Of course I could not reproduce that problem :-)
But I'd suggest the following for further debugging:
* drop try-to-fix-possible-race-condition.patch
* collect some timestamps:

override_dh_auto_build:
        ls -lart --time-style=full-iso po/Makefile* po/POTFILES* ./config.status
        $(MAKE) -C po POTFILES
        ls -lart --time-style=full-iso po/Makefile* po/POTFILES* ./config.status
        $(MAKE) -C po Makefile
        ls -lart --time-style=full-iso po/Makefile* po/POTFILES* ./config.status
        $(MAKE) trans-update -C po/
        $(MAKE) -C po/
        dh_auto_build

This gave me
-rwxr-xr-x 1 root root  5766 2016-03-19 18:18:06.000000000 +0000 po/POTFILES.in
-rwxr-xr-x 1 root root  9299 2016-04-10 22:57:29.274942029 +0000 
po/Makefile.in.in
-rwxr-xr-x 1 root root 73531 2016-04-10 23:44:53.058631525 +0000 ./config.status
-r--r--r-- 1 root root  6578 2016-04-10 23:45:36.118689433 +0000 po/POTFILES
-rw-r--r-- 1 root root  9294 2016-04-10 23:45:36.262689626 +0000 po/Makefile.in
-rw-r--r-- 1 root root 15872 2016-04-10 23:45:36.314689696 +0000 po/Makefile


I don't think we have here a "race condition" by some kind of parallelism.
I would more suspect a filesystem time resolution problem. Maybe even a bug in 
make itself.
IIRC the file systems used by kfreebsd and hurd only have second resolution, 
while (most) Linux filesystems have (up to) nanosecond resolution.


Andreas

Reply via email to