Java compiler is not parallel make safe (original) (raw)
During bootstrap on a SMP machine, I got
/export/build/gnu/gcc-3.4-ia32e/build-ia32e-linux/gcc/gcj
-B/export/build/gnu/gcc-3.4-ia32e/build-ia32e-linux/ia32e-linux/libjava/
-B/export/build/gnu/gcc-3.4-ia32e/build-ia32e-linux/gcc/ --encoding=UTF-8
-Wno-deprecated -C -g -classpath '' -bootclasspath
/export/build/gnu/gcc-3.4-ia32e/build-ia32e-linux/ia32e-linux/libjava:/net/gnu/export/gnu/src/gcc-3.4/gcc/libjava
-d /export/build/gnu/gcc-3.4-ia32e/build-ia32e-linux/ia32e-linux/libjava
/net/gnu/export/gnu/src/gcc-3.4/gcc/libjava/java/util/regex/Pattern.java
/net/gnu/export/gnu/src/gcc-3.4/gcc/libjava/java/util/regex/Pattern.java: In
class java.util.regex.Pattern': /net/gnu/export/gnu/src/gcc-3.4/gcc/libjava/java/util/regex/Pattern.java: In method ()':
/net/gnu/export/gnu/src/gcc-3.4/gcc/libjava/java/util/regex/Pattern.java:1:
fatal error: can't create directory
/export/build/gnu/gcc-3.4-ia32e/build-ia32e-linux/ia32e-linux/libjava/java/util/regex:
File exists
compilation terminated.
The problem is
while (1) { char *s = strchr (dname, sep); if (s == NULL) break; s = '\0'; if (stat (r, &sb) == -1 / Try to make it. */ && mkdir (r, 0755) == -1) fatal_error ("can't create directory %s: %m", r);
*s = sep;
/* Skip consecutive separators. */
for (dname = s + 1; *dname && *dname == sep; ++dname)
;}
in jcf-write.c. 'r' can be created between stat and mkdir.
Comment 1 Drea Pinski 2004-02-27 01:52:52 UTC
confirmed.
Comment 3 H.J. Lu 2004-03-03 16:12:31 UTC
The proposed patch works for me.
Comment 6 Tom Tromey 2004-03-23 17:55:18 UTC
Fix checked in on trunk.
Comment 7 H.J. Lu 2004-04-27 18:04:08 UTC
Can we backport this patch to 3.4?
Comment 9 Drea Pinski 2004-05-20 16:11:12 UTC
Fixed.