RFR: JDK-8154326: bash >(...) construct causes race conditions

Erik Joelsson erik.joelsson at oracle.com
Tue Apr 19 12:32:34 UTC 2016


After switching to the new hotspot build, we have seen some sporadic 
build errors related to the generation of dtrace JvmOffsets.h file on 
Solaris. The errors look like a compile target that depends on the 
header file fails because the header file is either empty or incomplete. 
I have managed to reproduce this by running this particular part of the 
build in a loop within 5 minutes.

The header file generation uses the rather new ExecuteWithLog macro, 
which uses the also rather new ">(tee logfile)" construct to save output 
to a log file while still echoing both stderr and stdout separately to 
the console. It seems however, that when using this construct, bash 
spawns background processes which may not be done when the main process 
is done.

I have noted a similar effect when switching to this construct for the 
main makefile build.log. The last line of make output would be echoed to 
the console after my prompt returned.

To solve this, I added "&& wait" in each location where the >(...) trick 
is used. I have then rerun the loop over night and could no longer 
reproduce the problem. I believe this to be the proper solution.

Bug: https://bugs.openjdk.java.net/browse/JDK-8154326
Webrev: http://cr.openjdk.java.net/~erikj/8154326/webrev.01/


More information about the build-dev mailing list