diff options
Diffstat (limited to 'dev-util/ccache/files/ccache-3.1.10-real-temp-files.patch')
-rw-r--r-- | dev-util/ccache/files/ccache-3.1.10-real-temp-files.patch | 185 |
1 files changed, 0 insertions, 185 deletions
diff --git a/dev-util/ccache/files/ccache-3.1.10-real-temp-files.patch b/dev-util/ccache/files/ccache-3.1.10-real-temp-files.patch deleted file mode 100644 index 45e654105170..000000000000 --- a/dev-util/ccache/files/ccache-3.1.10-real-temp-files.patch +++ /dev/null @@ -1,185 +0,0 @@ -https://lists.samba.org/archive/ccache/2014q4/001246.html - -From 5d0f507a4162ac89e05ca633dbc8056454b798f5 Mon Sep 17 00:00:00 2001 -From: Mike Frysinger <vapier@gentoo.org> -Date: Mon, 15 Sep 2014 18:15:02 -0400 -Subject: [PATCH] do not rely on pids being unique - -Linux supports creating pid namespaces cheaply and running processes -inside of them. When you try to share a single cache among multiple -such runs, the fact that the code relies on pid numbers as globally -unique values quickly fails. Instead, switch to standard mkstemp to -generate temp files for us. - -Signed-off-by: Mike Frysinger <vapier@gentoo.org> ---- - ccache.c | 12 ++++++------ - ccache.h | 2 +- - manifest.c | 2 +- - stats.c | 10 +++++++++- - util.c | 13 ++++++++----- - 5 files changed, 25 insertions(+), 14 deletions(-) - -diff --git a/ccache.c b/ccache.c -index 02dbdfa..1dc0a06 100644 ---- a/ccache.c -+++ b/ccache.c -@@ -526,8 +526,11 @@ to_cache(struct args *args) - unsigned added_files = 0; - - tmp_stdout = format("%s.tmp.stdout.%s", cached_obj, tmp_string()); -+ create_empty_file(tmp_stdout); - tmp_stderr = format("%s.tmp.stderr.%s", cached_obj, tmp_string()); -+ create_empty_file(tmp_stderr); - tmp_obj = format("%s.tmp.%s", cached_obj, tmp_string()); -+ create_empty_file(tmp_obj); - - args_add(args, "-o"); - args_add(args, tmp_obj); -@@ -579,7 +582,7 @@ to_cache(struct args *args) - int fd_result; - char *tmp_stderr2; - -- tmp_stderr2 = format("%s.tmp.stderr2.%s", cached_obj, tmp_string()); -+ tmp_stderr2 = format("%s.2", tmp_stderr); - if (x_rename(tmp_stderr, tmp_stderr2)) { - cc_log("Failed to rename %s to %s: %s", tmp_stderr, tmp_stderr2, - strerror(errno)); -@@ -808,6 +808,7 @@ get_object_name_from_cpp(struct args *args, struct mdfour *hash) - } - - path_stderr = format("%s/tmp.cpp_stderr.%s", temp_dir, tmp_string()); -+ create_empty_file(path_stderr); - add_pending_tmp_file(path_stderr); - - time_of_compilation = time(NULL); -@@ -815,6 +816,7 @@ get_object_name_from_cpp(struct args *args, struct mdfour *hash) - if (!direct_i_file) { - path_stdout = format("%s/%s.tmp.%s.%s", - temp_dir, input_base, tmp_string(), i_extension); -+ create_empty_file(path_stdout); - add_pending_tmp_file(path_stdout); - - /* run cpp on the input file to obtain the .i */ -@@ -838,11 +843,6 @@ get_object_name_from_cpp(struct args *args, struct mdfour *hash) - can skip the cpp stage and directly form the - correct i_tmpfile */ - path_stdout = input_file; -- if (create_empty_file(path_stderr) != 0) { -- cc_log("Failed to create %s: %s", path_stderr, strerror(errno)); -- stats_update(STATS_ERROR); -- failed(); -- } - status = 0; - } - -diff --git a/ccache.h b/ccache.h -index 2bc7c87..43ef98d 100644 ---- a/ccache.h -+++ b/ccache.h -@@ -130,7 +130,7 @@ size_t file_size(struct stat *st); - int safe_open(const char *fname); - char *x_realpath(const char *path); - char *gnu_getcwd(void); --int create_empty_file(const char *fname); -+int create_empty_file(char *fname); - const char *get_home_directory(void); - char *get_cwd(); - bool same_executable_name(const char *s1, const char *s2); -diff --git a/manifest.c b/manifest.c -index 7f02ede..47566d5 100644 ---- a/manifest.c -+++ b/manifest.c -@@ -633,7 +633,7 @@ manifest_put(const char *manifest_path, struct file_hash *object_hash, - } - - tmp_file = format("%s.tmp.%s", manifest_path, tmp_string()); -- fd2 = safe_open(tmp_file); -+ fd2 = mkstemp(tmp_file); - if (fd2 == -1) { - cc_log("Failed to open %s", tmp_file); - goto out; -diff --git a/stats.c b/stats.c -index 2111b65..4ed39c2 100644 ---- a/stats.c -+++ b/stats.c -@@ -126,11 +126,18 @@ stats_write(const char *path, struct counters *counters) - size_t i; - char *tmp_file; - FILE *f; -+ int fd; - - tmp_file = format("%s.tmp.%s", path, tmp_string()); -- f = fopen(tmp_file, "wb"); -+ fd = mkstemp(tmp_file); -+ if (fd == -1) { -+ cc_log("Failed to open %s", tmp_file); -+ goto end; -+ } -+ f = fdopen(fd, "wb"); - if (!f) { - cc_log("Failed to open %s", tmp_file); -+ close(fd); - goto end; - } - for (i = 0; i < counters->size; i++) { -@@ -138,6 +145,7 @@ stats_write(const char *path, struct counters *counters) - fatal("Failed to write to %s", tmp_file); - } - } -+ /* This also implicitly closes the fd. */ - fclose(f); - x_rename(tmp_file, path); - -diff --git a/util.c b/util.c -index 3b472de..cc630a6 100644 ---- a/util.c -+++ b/util.c -@@ -195,7 +195,7 @@ copy_file(const char *src, const char *dest, int compress_dest) - struct stat st; - int errnum; - -- tmp_name = format("%s.%s.XXXXXX", dest, tmp_string()); -+ tmp_name = format("%s.%s", dest, tmp_string()); - cc_log("Copying %s to %s via %s (%s)", - src, dest, tmp_name, compress_dest ? "compressed": "uncompressed"); - -@@ -427,7 +427,7 @@ tmp_string(void) - static char *ret; - - if (!ret) { -- ret = format("%s.%u", get_hostname(), (unsigned)getpid()); -+ ret = format("%s.%u.XXXXXX", get_hostname(), (unsigned)getpid()); - } - - return ret; -@@ -884,12 +884,13 @@ gnu_getcwd(void) - - /* create an empty file */ - int --create_empty_file(const char *fname) -+create_empty_file(char *fname) - { - int fd; - -- fd = open(fname, O_WRONLY|O_CREAT|O_TRUNC|O_EXCL|O_BINARY, 0666); -+ fd = mkstemp(fname); - if (fd == -1) { -+ cc_log("Failed to create %s: %s", fname, strerror(errno)); - return -1; - } - close(fd); -@@ -1134,7 +1135,9 @@ x_unlink(const char *path) - goto out; - } - if (unlink(tmp_name) == -1) { -- result = -1; -+ /* If it was released in a race, that's OK. */ -+ if (errno != ENOENT) -+ result = -1; - } - out: - free(tmp_name); --- -2.1.2 - |