diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2010-02-04 21:19:30 +0100 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2010-02-04 21:19:30 +0100 |
commit | 75c6e1fc1113984b30a4d84c1cfe6e97c70c398f (patch) | |
tree | e982ef3d44631b6a622e5712b1d48b2b652ca69d /src/Hooks | |
parent | baacc3cadfd08293e6f46bd84ab322d0cb67bf10 (diff) | |
download | abrt-75c6e1fc1113984b30a4d84c1cfe6e97c70c398f.tar.gz abrt-75c6e1fc1113984b30a4d84c1cfe6e97c70c398f.tar.xz abrt-75c6e1fc1113984b30a4d84c1cfe6e97c70c398f.zip |
use .new suffix on new crashdumps; strip it when crashdump is ready
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'src/Hooks')
-rw-r--r-- | src/Hooks/abrt-hook-ccpp.cpp | 10 | ||||
-rw-r--r-- | src/Hooks/abrt-hook-python.cpp | 10 |
2 files changed, 18 insertions, 2 deletions
diff --git a/src/Hooks/abrt-hook-ccpp.cpp b/src/Hooks/abrt-hook-ccpp.cpp index ff062341..d3f6b25d 100644 --- a/src/Hooks/abrt-hook-ccpp.cpp +++ b/src/Hooks/abrt-hook-ccpp.cpp @@ -195,7 +195,11 @@ int main(int argc, char** argv) const char *signame = strsignal(signal_no); char *reason = xasprintf("Process was terminated by signal %s (%s)", signal_str, signame ? signame : signal_str); - snprintf(path, sizeof(path), "%s/ccpp-%ld-%lu", dddir, (long)time(NULL), (long)pid); + unsigned path_len = snprintf(path, sizeof(path), "%s/ccpp-%ld-%lu.new", + dddir, (long)time(NULL), (long)pid); + if (path_len >= sizeof(path)) + exit(1); + CDebugDump dd; dd.Create(path, uid); dd.SaveText(FILENAME_ANALYZER, "CCpp"); @@ -246,6 +250,10 @@ int main(int argc, char** argv) * Classic deadlock. */ dd.Close(); + char *newpath = xstrndup(path, path_len - (sizeof(".new")-1)); + if (rename(path, newpath) != 0) + strcpy(path, newpath); + free(newpath); /* rhbz#539551: "abrt going crazy when crashing process is respawned" */ if (setting_MaxCrashReportsSize > 0) diff --git a/src/Hooks/abrt-hook-python.cpp b/src/Hooks/abrt-hook-python.cpp index 90197ccf..5686c17f 100644 --- a/src/Hooks/abrt-hook-python.cpp +++ b/src/Hooks/abrt-hook-python.cpp @@ -139,8 +139,10 @@ int main(int argc, char** argv) // Create directory with the debug dump char path[PATH_MAX]; - snprintf(path, sizeof(path), DEBUG_DUMPS_DIR"/pyhook-%ld-%s", + unsigned path_len = snprintf(path, sizeof(path), DEBUG_DUMPS_DIR"/pyhook-%ld-%s.new", (long)time(NULL), pid); + if (path_len >= sizeof(path)) + exit(1); CDebugDump dd; try { dd.Create(path, getuid()); @@ -160,6 +162,12 @@ int main(int argc, char** argv) dd.SaveText(FILENAME_UID, uid); dd.Close(); + + char *newpath = xstrndup(path, path_len - (sizeof(".new")-1)); + if (rename(path, newpath) != 0) + strcpy(path, newpath); + free(newpath); + log("saved python crash dump of pid %s to %s", pid, path); if (setting_MaxCrashReportsSize > 0) |