Commit 74daec8c by H.J. Lu Committed by H.J. Lu

re PR java/25330 (A race condition in write_classfile)

2005-12-12  H.J. Lu  <hongjiu.lu@intel.com>

	PR java/25330
	* jcf-write.c (write_classfile): Use PID in temporary class
	file. Save/restore errno when reporting error.

From-SVN: r108411
parent 22e0395a
2005-12-12 H.J. Lu <hongjiu.lu@intel.com>
PR java/25330
* jcf-write.c (write_classfile): Use PID in temporary class
file. Save/restore errno when reporting error.
2005-12-10 Terry Laurenzo <tlaurenzo@gmail.com>
PR java/9861
......
......@@ -3522,11 +3522,15 @@ write_classfile (tree clas)
{
FILE *stream;
char *temporary_file_name;
char pid [sizeof (long) * 2 + 2];
/* The .class file is initially written to a ".tmp" file so that
/* The .class file is initially written to a ".PID" file so that
if multiple instances of the compiler are running at once
they do not see partially formed class files. */
temporary_file_name = concat (class_file_name, ".tmp", NULL);
they do not see partially formed class files nor override
each other, which may happen in libjava with parallel build.
*/
sprintf (pid, ".%lx", (unsigned long) getpid ());
temporary_file_name = concat (class_file_name, pid, NULL);
stream = fopen (temporary_file_name, "wb");
if (stream == NULL)
fatal_error ("can't open %s for writing: %m", temporary_file_name);
......@@ -3548,7 +3552,9 @@ write_classfile (tree clas)
if (rename (temporary_file_name, class_file_name) == -1)
{
int errno_saved = errno;
remove (temporary_file_name);
errno = errno_saved;
fatal_error ("can't create %s: %m", class_file_name);
}
free (temporary_file_name);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment