diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2009-12-03 17:43:18 +0100 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2009-12-03 17:43:18 +0100 |
commit | a756114f9d29983d9505309efb3b6f0ed09f946f (patch) | |
tree | e86f75e53b1b910dc691d2aff11fc278821dfe7b /src/Daemon/MiddleWare.cpp | |
parent | 3bd822eac9229ac124fec89f7aa926cc7220972c (diff) | |
download | abrt-a756114f9d29983d9505309efb3b6f0ed09f946f.tar.gz abrt-a756114f9d29983d9505309efb3b6f0ed09f946f.tar.xz abrt-a756114f9d29983d9505309efb3b6f0ed09f946f.zip |
hopefully fix rhbz#541854: when we trim the dir, we must delete it from DB too
Also added a more robust code to resis SEGVing if directory doesn't exist.
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'src/Daemon/MiddleWare.cpp')
-rw-r--r-- | src/Daemon/MiddleWare.cpp | 63 |
1 files changed, 38 insertions, 25 deletions
diff --git a/src/Daemon/MiddleWare.cpp b/src/Daemon/MiddleWare.cpp index 94e27ae2..5f922e8d 100644 --- a/src/Daemon/MiddleWare.cpp +++ b/src/Daemon/MiddleWare.cpp @@ -247,7 +247,7 @@ mw_result_t CreateCrashReport(const char *pUUID, { CDatabase* database = g_pPluginManager->GetDatabase(g_settings_sDatabase.c_str()); database->Connect(); - row = database->GetUUIDData(pUUID, pUID); + row = database->GetRow(pUUID, pUID); database->DisConnect(); } if (pUUID[0] == '\0' || row.m_sUUID != pUUID) @@ -520,18 +520,26 @@ report_status_t Report(const map_crash_report_t& pCrashReport, return ret; } -std::string DeleteCrashInfo(const char *pUUID, - const char *pUID) +std::string DeleteCrashInfoInDB(const char *pUUID, + const char *pUID) { CDatabase* database = g_pPluginManager->GetDatabase(g_settings_sDatabase.c_str()); database->Connect(); - database_row_t row = database->GetUUIDData(pUUID, pUID); - database->Delete(pUUID, pUID); + database_row_t row = database->GetRow(pUUID, pUID); + database->DeleteRow(pUUID, pUID); database->DisConnect(); return row.m_sDebugDumpDir; } +void DeleteCrashInfosInDB_by_dir(const char *dump_dir) +{ + CDatabase* database = g_pPluginManager->GetDatabase(g_settings_sDatabase.c_str()); + database->Connect(); + database->DeleteRows_by_dir(dump_dir); + database->DisConnect(); +} + /** * Check whether particular debugdump directory is saved * in database. This check is done together with an UID of an user. @@ -746,26 +754,31 @@ static void RunAnalyzerActions(const char *pAnalyzer, const char *pDebugDumpDir) * @return It return results of operation. See mw_result_t. */ static mw_result_t SaveDebugDumpToDatabase(const char *pUUID, - const char *pUID, - const char *pTime, - const char *pDebugDumpDir, - map_crash_info_t& pCrashInfo) + const char *pUID, + const char *pTime, + const char *pDebugDumpDir, + map_crash_info_t& pCrashInfo) { CDatabase* database = g_pPluginManager->GetDatabase(g_settings_sDatabase.c_str()); database->Connect(); - database->Insert(pUUID, pUID, pDebugDumpDir, pTime); - database_row_t row = database->GetUUIDData(pUUID, pUID); + /* note: if [UUID,UID] record exists, pDebugDumpDir is not updated in the record */ + database->Insert_or_Update(pUUID, pUID, pDebugDumpDir, pTime); + database_row_t row = database->GetRow(pUUID, pUID); database->DisConnect(); - mw_result_t res = GetCrashInfo(pUUID, pUID, pCrashInfo); - if (row.m_sReported == "1") - { - log("Crash is already reported"); - return MW_REPORTED; - } - if (row.m_sCount != "1") + + mw_result_t res = FillCrashInfo(pUUID, pUID, pCrashInfo); + if (res == MW_OK) { - log("Crash is in database already"); - return MW_OCCURED; + if (row.m_sReported == "1") + { + log("Crash is already reported"); + return MW_REPORTED; + } + if (row.m_sCount != "1") + { + log("Crash is in database already"); + return MW_OCCURED; + } } return res; } @@ -775,13 +788,13 @@ std::string getDebugDumpDir(const char *pUUID, { CDatabase* database = g_pPluginManager->GetDatabase(g_settings_sDatabase.c_str()); database->Connect(); - database_row_t row = database->GetUUIDData(pUUID, pUID); + database_row_t row = database->GetRow(pUUID, pUID); database->DisConnect(); return row.m_sDebugDumpDir; } mw_result_t SaveDebugDump(const char *pDebugDumpDir, - map_crash_info_t& pCrashInfo) + map_crash_info_t& pCrashInfo) { std::string UID; std::string time; @@ -823,14 +836,13 @@ mw_result_t SaveDebugDump(const char *pDebugDumpDir, return SaveDebugDumpToDatabase(lUUID.c_str(), uid_str, time.c_str(), pDebugDumpDir, pCrashInfo); } -mw_result_t GetCrashInfo(const char *pUUID, +mw_result_t FillCrashInfo(const char *pUUID, const char *pUID, map_crash_info_t& pCrashInfo) { - pCrashInfo.clear(); CDatabase* database = g_pPluginManager->GetDatabase(g_settings_sDatabase.c_str()); database->Connect(); - database_row_t row = database->GetUUIDData(pUUID, pUID); + database_row_t row = database->GetRow(pUUID, pUID); database->DisConnect(); std::string package; @@ -856,6 +868,7 @@ mw_result_t GetCrashInfo(const char *pUUID, return MW_ERROR; } + pCrashInfo.clear(); add_crash_data_to_crash_info(pCrashInfo, CD_EXECUTABLE, executable); add_crash_data_to_crash_info(pCrashInfo, CD_PACKAGE, package); add_crash_data_to_crash_info(pCrashInfo, CD_DESCRIPTION, description); |