[ABRT EL6 PATCH] abrtd: update last occurrence dump dir file

Jakub Filak jfilak at redhat.com
Mon May 13 09:45:04 UTC 2013


This 09bc9e63b053a6a7353e3a2b8a7accc0a738af6b commit needs to be backtored 
too, otherwise the last_occurrence file never gets updated.

And we probably want to backport this commit too:
   e583b56 use last_occurrence with --since



Regards,
Jakub

On Monday 13 of May 2013 08:04:47 Jiri Moskovcak wrote:
> From: Jakub Filak <jfilak at redhat.com>
> 
> Related to rhbz#947870
> 
> Signed-off-by: Jakub Filak <jfilak at redhat.com>
> Signed-off-by: Martin Milata <mmilata at redhat.com>
> ---
>  src/daemon/abrtd.c | 35 +++++++++++++++++++++++++++++++++++
>  1 file changed, 35 insertions(+)
> 
> diff --git a/src/daemon/abrtd.c b/src/daemon/abrtd.c
> index 54006b3..6e73cb3 100644
> --- a/src/daemon/abrtd.c
> +++ b/src/daemon/abrtd.c
> @@ -434,6 +434,41 @@ static gboolean handle_event_output_cb(GIOChannel *gio,
> GIOCondition condition, char new_count_str[sizeof(long)*3 + 2];
>          sprintf(new_count_str, "%lu", count);
>          dd_save_text(dd, FILENAME_COUNT, new_count_str);
> +
> +        /* This condition can be simplified to either
> +         * (status * != 0 && * state->dup_of_dir) or (count == 1). But the
> +         * chosen form is much more reliable and safe. We must not call
> +         * dd_opendir() to locked dd otherwise we go into a deadlock.
> +         */
> +        if (strcmp(dd->dd_dirname, state->dirname) != 0)
> +        {
> +            /* Update the last occurrence file by the time file of the new
> problem */ +            struct dump_dir *new_dd =
> dd_opendir(state->dirname, DD_OPEN_READONLY); +            char *last_ocr =
> NULL;
> +            if (new_dd)
> +            {
> +                /* TIME must exists in a valid dump directory but we don't
> want to die +                 * due to broken duplicated dump directory */
> +                last_ocr = dd_load_text_ext(new_dd, FILENAME_TIME,
> +                            DD_LOAD_TEXT_RETURN_NULL_ON_FAILURE |
> DD_FAIL_QUIETLY_ENOENT); +                dd_close(new_dd);
> +            }
> +            else
> +            {   /* dd_opendir() already produced a message with good
> information about failure */ +                error_msg("Can't read the
> last occurrence file from the new dump directory."); +            }
> +
> +            if (!last_ocr)
> +            {   /* the new dump directory may lie in the dump location for
> some time */ +                log("Using current time for the last
> occurrence file which may be incorrect."); +                time_t t =
> time(NULL);
> +                last_ocr = xasprintf("%lu", (long)t);
> +            }
> +
> +            dd_save_text(dd, FILENAME_LAST_OCCURRENCE, last_ocr);
> +
> +            free(last_ocr);
> +        }
>      }
>      dd_close(dd);


More information about the Crash-catcher mailing list