The bug is triggered by:
dumpoops -d cut_here.test; echo $?; dumpoops -d cut_here.test; echo $?; dumpoops -d
cut_here.test; echo $?
Second dumpoops fails.
--
vda
diff -x '*.po' -d -urpN abrt.0/lib/Plugins/KerneloopsScanner.cpp
abrt.1/lib/Plugins/KerneloopsScanner.cpp
--- abrt.0/lib/Plugins/KerneloopsScanner.cpp 2010-07-09 14:10:31.000000000 +0200
+++ abrt.1/lib/Plugins/KerneloopsScanner.cpp 2010-07-15 17:55:23.082148982 +0200
@@ -118,13 +118,14 @@ void save_oops_to_debug_dump(const vecto
unsigned countdown = 16; /* do not report hundreds of oopses */
unsigned idx = oopsList.size();
time_t t = time(NULL);
+ pid_t my_pid = getpid();
VERB1 log("Saving %u oopses as crash dump dirs", idx >= countdown ?
countdown-1 : idx);
while (idx != 0 && --countdown != 0)
{
- char path[sizeof(DEBUG_DUMPS_DIR"/kerneloops-%lu-%lu") + 2 *
sizeof(long)*3];
- sprintf(path, DEBUG_DUMPS_DIR"/kerneloops-%lu-%lu", (long)t,
(long)idx);
+ char path[sizeof(DEBUG_DUMPS_DIR"/kerneloops-%lu-%lu-%lu") + 3 *
sizeof(long)*3];
+ sprintf(path, DEBUG_DUMPS_DIR"/kerneloops-%lu-%lu-%lu", (long)t,
(long)my_pid, (long)idx);
try
{
std::string oops = oopsList.at(--idx);
diff -x '*.po' -d -urpN abrt.0/src/Hooks/dumpoops.cpp
abrt.1/src/Hooks/dumpoops.cpp
--- abrt.0/src/Hooks/dumpoops.cpp 2010-06-30 13:18:39.000000000 +0200
+++ abrt.1/src/Hooks/dumpoops.cpp 2010-07-15 17:55:48.698146362 +0200
@@ -23,6 +23,7 @@
#include "abrtlib.h"
#include "abrt_types.h"
+#include "abrt_exception.h"
#include "KerneloopsScanner.h"
#include <dlfcn.h>
@@ -109,7 +110,13 @@ int main(int argc, char **argv)
}
if (opt_d) {
log("dumping oopses");
- save_oops_to_debug_dump(oopsList);
+ try {
+ save_oops_to_debug_dump(oopsList);
+ }
+ catch (CABRTException& e) {
+ fprintf(stderr, "Error: %s\n", e.what());
+ return 1;
+ }
}
}