On 2018-10-08 23:56, Erik Joelsson wrote:
Hello,
On 2018-10-07 02:52, Magnus Ihse Bursie wrote:
One problem with this is that you're replacing this pattern
rm -r $DIR
mkdir -p $DIR
with this:
mkdir -p $DIR
rm -r $DIR/*
However, they are not equivalent. :( The latter will not remove any
hidden dot-files.
Not equivalent, but I very much doubt it matters in any of the changed
locations.
On the other hand, using the MakeDir macro in a recipe that is already
deleting the target directory is pointless since the directory will
never be reused anyway. That construct can also never work if there
are concurrent mkdir lines for the same directory, so we know these
are safe already.
Or we have just been lucky to never run into such a disastrous race. ;-)
For these reasons, I reverted those changes. The rm -r followed by
mkdir -p pattern is ok as it is.
Fair enough.
I recommend that you create a new macro like MakeAndCleanDir, which
does this, and that it either keeps the old behavior of always
removing the dir recursively and then re-create it, or that your
create it conditionally like now but fix so rm also handles
dot-files. Or that it checks if any files are present by $(wildcard)
and only calls rm if needed. This is likely most efficient, but care
must be taken to be sure to check for dot files, but not for the . or
.. dirs.
This seems a bit excessive to me and unlikely to provide any real
benefit.
New webrev: http://cr.openjdk.java.net/~erikj/8211724/webrev.02/
Looks good to me.
/Magnus
/Erik
/Magnus
5 okt. 2018 kl. 23:31 skrev Erik Joelsson <erik.joels...@oracle.com>:
As a followup to JDK-8211677, here is an attempt at fixing most
other instances of $(MKDIR) -p to instead of the MakeDir or
MakeTargetDir macros. Since fixing the previous bug, we have hit the
race in other recipes as well so this is really needed.
There are some situations where the macro would not apply, so those
have been skipped. I'm also pretty sure that those are race free.
See bug comment for details.
In addition to this I evaluated the AC_PROG_MKDIR_P macro. It didn't
quite work out for us however. The fallback method if it cannot find
a suitable mkdir binary is to use the build-aux/install.sh script.
Our problem is that we have not included this script in our source
(just a fake empty file) and to include it now would require a lot
of legal work. What I've done instead is to simply add gmkdir first
in the list of programs to look for when searching for mkdir. On
Solaris, this is the program the macro found (and internally we have
that installed on Solaris), so this will at least fix the immediate
problem we are currently facing.
Bug: https://bugs.openjdk.java.net/browse/JDK-8211724
Webrev: http://cr.openjdk.java.net/~erikj/8211724/webrev.01/index.html
/Erik