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