diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2009-10-29 00:37:10 +0100 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2009-10-29 00:37:10 +0100 |
commit | f369ec1fa4e2886ce01aeea51044d15f0407fed3 (patch) | |
tree | 5445e7adae55895bcf839cbad3a10c510692053c /lib | |
parent | 7a2a2fa7e8d613c69d0fda6c220d97936f56c4fd (diff) | |
download | abrt-f369ec1fa4e2886ce01aeea51044d15f0407fed3.tar.gz abrt-f369ec1fa4e2886ce01aeea51044d15f0407fed3.tar.xz abrt-f369ec1fa4e2886ce01aeea51044d15f0407fed3.zip |
Kerneloops: remove two classes, vector_string_t works as good
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Plugins/Kerneloops.h | 3 | ||||
-rw-r--r-- | lib/Plugins/KerneloopsScanner.cpp | 26 | ||||
-rw-r--r-- | lib/Plugins/KerneloopsScanner.h | 2 | ||||
-rw-r--r-- | lib/Plugins/KerneloopsSysLog.cpp | 45 | ||||
-rw-r--r-- | lib/Plugins/KerneloopsSysLog.h | 24 |
5 files changed, 26 insertions, 74 deletions
diff --git a/lib/Plugins/Kerneloops.h b/lib/Plugins/Kerneloops.h index 13fb0098..edd00d8b 100644 --- a/lib/Plugins/Kerneloops.h +++ b/lib/Plugins/Kerneloops.h @@ -29,11 +29,8 @@ #include "Plugin.h" #include "Analyzer.h" - #include <string> -#include "KerneloopsSysLog.h" - class CAnalyzerKerneloops : public CAnalyzer { public: diff --git a/lib/Plugins/KerneloopsScanner.cpp b/lib/Plugins/KerneloopsScanner.cpp index 317aeabb..14eb72a8 100644 --- a/lib/Plugins/KerneloopsScanner.cpp +++ b/lib/Plugins/KerneloopsScanner.cpp @@ -78,24 +78,29 @@ void CKerneloopsScanner::SaveOopsToDebugDump() { update_client(_("Creating kernel oops crash reports...")); + int countdown = 16; /* do not report hundreds of oopses */ time_t t = time(NULL); - std::list<COops> oopsList = m_pSysLog.GetOopsList(); - m_pSysLog.ClearOopsList(); + vector_string_t oopsList = m_pOopsList; + m_pOopsList.clear(); - while (!oopsList.empty()) { + while (!oopsList.empty() && --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)oopsList.size()); - COops oops = oopsList.back(); + + std::string oops = oopsList.back(); + const char *first_line = oops.c_str(); + char *second_line = (char*)strchr(first_line, '\n'); /* never NULL */ + *second_line++ = '\0'; try { CDebugDump debugDump; debugDump.Create(path, 0); debugDump.SaveText(FILENAME_ANALYZER, "Kerneloops"); debugDump.SaveText(FILENAME_EXECUTABLE, "kernel"); - debugDump.SaveText(FILENAME_KERNEL, oops.m_sVersion); + debugDump.SaveText(FILENAME_KERNEL, first_line); debugDump.SaveText(FILENAME_PACKAGE, "not_applicable"); - debugDump.SaveText(FILENAME_KERNELOOPS, oops.m_sData); + debugDump.SaveText(FILENAME_KERNELOOPS, second_line); } catch (CABRTException& e) { @@ -116,7 +121,8 @@ int CKerneloopsScanner::ScanDmesg() buffer = (char*)xzalloc(pagesz + 1); syscall(__NR_syslog, 3, buffer, pagesz); - cnt_FoundOopses = m_pSysLog.ExtractOops(buffer, strlen(buffer)); + m_pOopsList.clear(); + cnt_FoundOopses = extract_oopses(m_pOopsList, buffer, strlen(buffer)); free(buffer); return cnt_FoundOopses; @@ -160,8 +166,10 @@ int CKerneloopsScanner::ScanSysLogFile(const char *filename) close(fd); cnt_FoundOopses = 0; - if (sz > 0) - cnt_FoundOopses = m_pSysLog.ExtractOops(buffer, sz); + if (sz > 0) { + m_pOopsList.clear(); + cnt_FoundOopses = extract_oopses(m_pOopsList, buffer, sz); + } free(buffer); return cnt_FoundOopses; diff --git a/lib/Plugins/KerneloopsScanner.h b/lib/Plugins/KerneloopsScanner.h index 512fb9c8..caa5f72d 100644 --- a/lib/Plugins/KerneloopsScanner.h +++ b/lib/Plugins/KerneloopsScanner.h @@ -35,7 +35,7 @@ class CKerneloopsScanner : public CAction { private: std::string m_sSysLogFile; - CSysLog m_pSysLog; + vector_string_t m_pOopsList; public: /* For "dumpoops" tool */ diff --git a/lib/Plugins/KerneloopsSysLog.cpp b/lib/Plugins/KerneloopsSysLog.cpp index 886073b3..d6f257ec 100644 --- a/lib/Plugins/KerneloopsSysLog.cpp +++ b/lib/Plugins/KerneloopsSysLog.cpp @@ -26,45 +26,13 @@ #include "abrtlib.h" #include "KerneloopsSysLog.h" - -#include <list> #include <assert.h> -/* - * This limits the number of oopses we'll submit per session; - * it's important that this is bounded to avoid feedback loops - * for the scenario where submitting an oopses causes a warning/oops - */ -#define MAX_OOPS 16 - -CSysLog::CSysLog() : - m_nFoundOopses(0) -{} - -void CSysLog::QueueOops(char *data, char *version) -{ - if (m_nFoundOopses > MAX_OOPS) - return; - - COops m_NewOops; - m_NewOops.m_sData = data; - m_NewOops.m_sVersion = version; - - m_OopsQueue.push_back(m_NewOops); - m_nFoundOopses++; -} - -void CSysLog::ClearOopsList() +static void queue_oops(vector_string_t &vec, const char *data, const char *version) { - m_OopsQueue.clear(); + vec.push_back(ssprintf("%s\n%s", version, data)); } -const std::list<COops>& CSysLog::GetOopsList() -{ - return m_OopsQueue; -} - - /* * extract_version tries to find the kernel version in given data */ @@ -104,7 +72,7 @@ struct line_info { char level; }; #define REALLOC_CHUNK 1000 -int CSysLog::ExtractOops(char *buffer, size_t buflen) +int extract_oopses(vector_string_t &oopses, char *buffer, size_t buflen) { char *c; enum { maybe, no, yes } syslog_format = maybe; @@ -216,10 +184,9 @@ next_line: int i; char prevlevel = 0; int oopsstart = -1; - int oopsend; + int oopsend = linecount; int inbacktrace = 0; int oopsesfound = 0; - oopsend = linecount; i = 0; while (i < linecount) { @@ -370,7 +337,7 @@ next_line: } /* too short oopses are invalid */ if (strlen(oops) > 100) { - QueueOops(oops, version); + queue_oops(oopses, oops, version); oopsesfound++; } oopsstart = -1; @@ -420,7 +387,7 @@ next_line: } /* too short oopses are invalid */ if (strlen(oops) > 100) { - QueueOops(oops, version); + queue_oops(oopses, oops, version); oopsesfound++; } oopsstart = -1; diff --git a/lib/Plugins/KerneloopsSysLog.h b/lib/Plugins/KerneloopsSysLog.h index 8d0626b7..a67b33d4 100644 --- a/lib/Plugins/KerneloopsSysLog.h +++ b/lib/Plugins/KerneloopsSysLog.h @@ -27,28 +27,8 @@ #ifndef __INCLUDE_GUARD_KERNELOOPSSYSLOG_H_ #define __INCLUDE_GUARD_KERNELOOPSSYSLOG_H_ -#include <string> -#include <list> +#include "abrt_types.h" -class COops -{ - public: - std::string m_sData; - std::string m_sVersion; -}; - -class CSysLog -{ - private: - void QueueOops(char *data, char *version); - std::list<COops> m_OopsQueue; - int m_nFoundOopses; - - public: - CSysLog(); - const std::list<COops>& GetOopsList(); - void ClearOopsList(); - int ExtractOops(char *buffer, size_t buflen); -}; +int extract_oopses(vector_string_t &oopses, char *buffer, size_t buflen); #endif |