summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
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.patch185
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
-