RFR: JDK-8211724: Change mkdir -p to MakeDir macro where possible
Magnus Ihse Bursie
magnus.ihse.bursie at oracle.com
Tue Oct 9 12:03:57 UTC 2018
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.joelsson at 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
>>>
>
More information about the build-dev
mailing list