[PATCH 1/3] Only problems of same type can be duplicates

Martin Milata mmilata at redhat.com
Fri May 10 14:07:28 UTC 2013


The local duplicate detection routine was augmented to never consider
two problems from different analyzer to be duplicates.

Signed-off-by: Martin Milata <mmilata at redhat.com>
---
 src/daemon/abrt-handle-event.c | 18 +++++++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)

diff --git a/src/daemon/abrt-handle-event.c b/src/daemon/abrt-handle-event.c
index e11d192..11d554f 100644
--- a/src/daemon/abrt-handle-event.c
+++ b/src/daemon/abrt-handle-event.c
@@ -197,6 +197,10 @@ static int is_crash_a_dup(const char *dump_dir_name, void *param)
     dup_uuid_init(dd);
     dup_corebt_init(dd);
 
+    char *analyzer = dd_load_text(dd, FILENAME_ANALYZER);
+    /* dump_dir_name can be relative */
+    dump_dir_name = realpath(dump_dir_name, NULL);
+
     dd_close(dd);
 
     DIR *dir = opendir(g_settings_dump_location);
@@ -215,6 +219,7 @@ static int is_crash_a_dup(const char *dump_dir_name, void *param)
             continue; /* skip anything named "<dirname>.new" */
 
         char *dump_dir_name2 = concat_path_file(g_settings_dump_location, dent->d_name);
+        char *dd_uid = NULL, *dd_analyzer = NULL;
 
         if (strcmp(dump_dir_name, dump_dir_name2) == 0)
             goto next; /* we are never a dup of ourself */
@@ -224,13 +229,21 @@ static int is_crash_a_dup(const char *dump_dir_name, void *param)
             goto next;
 
         /* crashes of different users are not considered duplicates */
-        char *dd_uid = dd_load_text_ext(dd, FILENAME_UID, DD_FAIL_QUIETLY_ENOENT);
+        dd_uid = dd_load_text_ext(dd, FILENAME_UID, DD_FAIL_QUIETLY_ENOENT);
         if (strcmp(uid, dd_uid))
         {
             dd_close(dd);
             goto next;
         }
 
+        /* different crash types are not duplicates */
+        dd_analyzer = dd_load_text_ext(dd, FILENAME_ANALYZER, DD_FAIL_QUIETLY_ENOENT);
+        if (strcmp(analyzer, dd_analyzer))
+        {
+            dd_close(dd);
+            goto next;
+        }
+
         if (dup_uuid_compare(dd)
          || dup_corebt_compare(dd)
         ) {
@@ -243,10 +256,13 @@ static int is_crash_a_dup(const char *dump_dir_name, void *param)
 
 next:
         free(dump_dir_name2);
+        free(dd_uid);
+        free(dd_analyzer);
     }
     closedir(dir);
 
 end:
+    free(analyzer);
     return retval;
 }
 
-- 
1.7.11.7



More information about the Crash-catcher mailing list