summaryrefslogtreecommitdiffstats
path: root/src/Hooks
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2010-02-04 21:19:30 +0100
committerDenys Vlasenko <vda.linux@googlemail.com>2010-02-04 21:19:30 +0100
commit75c6e1fc1113984b30a4d84c1cfe6e97c70c398f (patch)
treee982ef3d44631b6a622e5712b1d48b2b652ca69d /src/Hooks
parentbaacc3cadfd08293e6f46bd84ab322d0cb67bf10 (diff)
downloadabrt-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.cpp10
-rw-r--r--src/Hooks/abrt-hook-python.cpp10
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)