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.