From 7a2a2fa7e8d613c69d0fda6c220d97936f56c4fd Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Wed, 28 Oct 2009 23:44:28 +0100 Subject: KerneloopsScanner: do not use global variables needlessly text data bss dec hex filename 27341 1688 48 29077 7195 old/libKerneloopsScanner.so 26466 1672 24 28162 6e02 new/libKerneloopsScanner.so Signed-off-by: Denys Vlasenko --- lib/Plugins/KerneloopsScanner.cpp | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) (limited to 'lib/Plugins/KerneloopsScanner.cpp') diff --git a/lib/Plugins/KerneloopsScanner.cpp b/lib/Plugins/KerneloopsScanner.cpp index 60fa92e..317aeab 100644 --- a/lib/Plugins/KerneloopsScanner.cpp +++ b/lib/Plugins/KerneloopsScanner.cpp @@ -83,12 +83,10 @@ void CKerneloopsScanner::SaveOopsToDebugDump() m_pSysLog.ClearOopsList(); while (!oopsList.empty()) { - char path[PATH_MAX]; - snprintf(path, sizeof(path), "%s/kerneloops-%lu-%lu", - DEBUG_DUMPS_DIR, (long)t, (long)oopsList.size()); - + 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(); - try { CDebugDump debugDump; @@ -171,9 +169,10 @@ int CKerneloopsScanner::ScanSysLogFile(const char *filename) void CKerneloopsScanner::SetSettings(const map_plugin_settings_t& pSettings) { - if (pSettings.find("SysLogFile") != pSettings.end()) + map_plugin_settings_t::const_iterator it = pSettings.find("SysLogFile"); + if (it != pSettings.end()) { - m_sSysLogFile = pSettings.find("SysLogFile")->second; + m_sSysLogFile = it->second; } } -- cgit From f369ec1fa4e2886ce01aeea51044d15f0407fed3 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Thu, 29 Oct 2009 00:37:10 +0100 Subject: Kerneloops: remove two classes, vector_string_t works as good Signed-off-by: Denys Vlasenko --- lib/Plugins/KerneloopsScanner.cpp | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) (limited to 'lib/Plugins/KerneloopsScanner.cpp') diff --git a/lib/Plugins/KerneloopsScanner.cpp b/lib/Plugins/KerneloopsScanner.cpp index 317aeab..14eb72a 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 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; -- cgit From f5f29b1aa55aba06498171ad64421424372f1682 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Thu, 29 Oct 2009 01:57:07 +0100 Subject: dumpoops: add -s option to dump results to stdout Signed-off-by: Denys Vlasenko --- lib/Plugins/KerneloopsScanner.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'lib/Plugins/KerneloopsScanner.cpp') diff --git a/lib/Plugins/KerneloopsScanner.cpp b/lib/Plugins/KerneloopsScanner.cpp index 14eb72a..4caa459 100644 --- a/lib/Plugins/KerneloopsScanner.cpp +++ b/lib/Plugins/KerneloopsScanner.cpp @@ -31,6 +31,7 @@ #include "DebugDump.h" #include "ABRTException.h" #include "CommLayerInner.h" +#include "KerneloopsSysLog.h" #include "KerneloopsScanner.h" @@ -202,7 +203,7 @@ PLUGIN_INFO(ACTION, "http://people.redhat.com/aarapov", ""); -/* for dumpoops tool */ +/* For "dumpoops" tool */ extern "C" { int scan_syslog_file(CKerneloopsScanner *This, const char *filename) -- cgit From 7f10181be367d77e5f3203e938ab24cf722119df Mon Sep 17 00:00:00 2001 From: Nikola Pajkovsky Date: Thu, 29 Oct 2009 15:20:56 +0100 Subject: Normal user can see kerneloops and report it Bugzilla memory leaks fix --- lib/Plugins/KerneloopsScanner.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'lib/Plugins/KerneloopsScanner.cpp') diff --git a/lib/Plugins/KerneloopsScanner.cpp b/lib/Plugins/KerneloopsScanner.cpp index 4caa459..bf0222a 100644 --- a/lib/Plugins/KerneloopsScanner.cpp +++ b/lib/Plugins/KerneloopsScanner.cpp @@ -34,6 +34,7 @@ #include "KerneloopsSysLog.h" #include "KerneloopsScanner.h" +#include #define FILENAME_KERNELOOPS "kerneloops" @@ -96,7 +97,7 @@ void CKerneloopsScanner::SaveOopsToDebugDump() try { CDebugDump debugDump; - debugDump.Create(path, 0); + debugDump.Create(path, UINT_MAX); debugDump.SaveText(FILENAME_ANALYZER, "Kerneloops"); debugDump.SaveText(FILENAME_EXECUTABLE, "kernel"); debugDump.SaveText(FILENAME_KERNEL, first_line); -- cgit From de826dface052d434c0200cdf1ca96b36b1f72ef Mon Sep 17 00:00:00 2001 From: Jiri Moskovcak Date: Tue, 3 Nov 2009 14:11:46 +0100 Subject: Kerneloopscanner: small fix to make it work on x86_64 --- lib/Plugins/KerneloopsScanner.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'lib/Plugins/KerneloopsScanner.cpp') diff --git a/lib/Plugins/KerneloopsScanner.cpp b/lib/Plugins/KerneloopsScanner.cpp index bf0222a..9e1bd53 100644 --- a/lib/Plugins/KerneloopsScanner.cpp +++ b/lib/Plugins/KerneloopsScanner.cpp @@ -97,7 +97,8 @@ void CKerneloopsScanner::SaveOopsToDebugDump() try { CDebugDump debugDump; - debugDump.Create(path, UINT_MAX); + // UID of kerneloops is -1 + debugDump.Create(path, -1); debugDump.SaveText(FILENAME_ANALYZER, "Kerneloops"); debugDump.SaveText(FILENAME_EXECUTABLE, "kernel"); debugDump.SaveText(FILENAME_KERNEL, first_line); -- cgit From 64c5d35aebc38f93ce5c086c15c15de5acb21b2f Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Thu, 5 Nov 2009 17:21:11 +0100 Subject: InformAllUsers support. enabled by default for Kerneloops. Tested wuth CCpp. Signed-off-by: Denys Vlasenko --- lib/Plugins/KerneloopsScanner.cpp | 27 +++++++++++---------------- 1 file changed, 11 insertions(+), 16 deletions(-) (limited to 'lib/Plugins/KerneloopsScanner.cpp') diff --git a/lib/Plugins/KerneloopsScanner.cpp b/lib/Plugins/KerneloopsScanner.cpp index 9e1bd53..c7756ba 100644 --- a/lib/Plugins/KerneloopsScanner.cpp +++ b/lib/Plugins/KerneloopsScanner.cpp @@ -43,7 +43,6 @@ CKerneloopsScanner::CKerneloopsScanner() { int cnt_FoundOopses; - m_sSysLogFile = "/var/log/messages"; /* Scan dmesg, on first call only */ cnt_FoundOopses = ScanDmesg(); @@ -54,16 +53,21 @@ CKerneloopsScanner::CKerneloopsScanner() void CKerneloopsScanner::Run(const std::string& pActionDir, const std::string& pArgs) { - int cnt_FoundOopses; + const char *syslog_file = "/var/log/messages"; + map_plugin_settings_t::const_iterator it = m_pSettings.find("SysLogFile"); + if (it != m_pSettings.end()) + { + syslog_file = it->second.c_str(); + } - cnt_FoundOopses = ScanSysLogFile(m_sSysLogFile.c_str()); + int cnt_FoundOopses = ScanSysLogFile(syslog_file); if (cnt_FoundOopses > 0) { SaveOopsToDebugDump(); /* * This marker in syslog file prevents us from * re-parsing old oopses (any oops before it is * ignored by ScanSysLogFile()). The only problem - * is that we can't be sure here that m_sSysLogFile + * is that we can't be sure here that syslog_file * is the file where syslog(xxx) stuff ends up. */ openlog("abrt", 0, LOG_KERN); @@ -97,8 +101,7 @@ void CKerneloopsScanner::SaveOopsToDebugDump() try { CDebugDump debugDump; - // UID of kerneloops is -1 - debugDump.Create(path, -1); + debugDump.Create(path, 0); debugDump.SaveText(FILENAME_ANALYZER, "Kerneloops"); debugDump.SaveText(FILENAME_EXECUTABLE, "kernel"); debugDump.SaveText(FILENAME_KERNEL, first_line); @@ -180,20 +183,12 @@ int CKerneloopsScanner::ScanSysLogFile(const char *filename) void CKerneloopsScanner::SetSettings(const map_plugin_settings_t& pSettings) { - map_plugin_settings_t::const_iterator it = pSettings.find("SysLogFile"); - if (it != pSettings.end()) - { - m_sSysLogFile = it->second; - } + m_pSettings = pSettings; } map_plugin_settings_t CKerneloopsScanner::GetSettings() { - map_plugin_settings_t ret; - - ret["SysLogFile"] = m_sSysLogFile; - - return ret; + return m_pSettings; } PLUGIN_INFO(ACTION, -- cgit From c8e9e69f96c2bd0b9248d6dfab91e2d27ab8e608 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Fri, 6 Nov 2009 12:41:24 +0100 Subject: mass replace of const string& params by const char* Signed-off-by: Denys Vlasenko --- lib/Plugins/KerneloopsScanner.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'lib/Plugins/KerneloopsScanner.cpp') diff --git a/lib/Plugins/KerneloopsScanner.cpp b/lib/Plugins/KerneloopsScanner.cpp index c7756ba..3572ef2 100644 --- a/lib/Plugins/KerneloopsScanner.cpp +++ b/lib/Plugins/KerneloopsScanner.cpp @@ -50,8 +50,7 @@ CKerneloopsScanner::CKerneloopsScanner() SaveOopsToDebugDump(); } -void CKerneloopsScanner::Run(const std::string& pActionDir, - const std::string& pArgs) +void CKerneloopsScanner::Run(const char *pActionDir, const char *pArgs) { const char *syslog_file = "/var/log/messages"; map_plugin_settings_t::const_iterator it = m_pSettings.find("SysLogFile"); -- cgit From 57039b590e4411606795893c90f9871e0412ca31 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Fri, 6 Nov 2009 18:26:42 +0100 Subject: give Plugin class a map_plugin_settings_t member This simplifies and unifies get/set settings ops Signed-off-by: Denys Vlasenko --- lib/Plugins/KerneloopsScanner.cpp | 10 ---------- 1 file changed, 10 deletions(-) (limited to 'lib/Plugins/KerneloopsScanner.cpp') diff --git a/lib/Plugins/KerneloopsScanner.cpp b/lib/Plugins/KerneloopsScanner.cpp index 3572ef2..8c8cd4b 100644 --- a/lib/Plugins/KerneloopsScanner.cpp +++ b/lib/Plugins/KerneloopsScanner.cpp @@ -180,16 +180,6 @@ int CKerneloopsScanner::ScanSysLogFile(const char *filename) return cnt_FoundOopses; } -void CKerneloopsScanner::SetSettings(const map_plugin_settings_t& pSettings) -{ - m_pSettings = pSettings; -} - -map_plugin_settings_t CKerneloopsScanner::GetSettings() -{ - return m_pSettings; -} - PLUGIN_INFO(ACTION, CKerneloopsScanner, "KerneloopsScanner", -- cgit