Works as expected. Looks good.

On Tuesday, February 05, 2013 01:09:27 PM Denys Vlasenko wrote:
> diff -x '*.po' -d -urpN abrt.2/src/plugins/abrt-dump-oops.c
> abrt.3/src/plugins/abrt-dump-oops.c ---
> abrt.2/src/plugins/abrt-dump-oops.c   2013-02-04 12:14:37.000000000 +0100 +++
> abrt.3/src/plugins/abrt-dump-oops.c   2013-02-05 13:03:31.193062774 +0100 @@
> -19,6 +19,11 @@
>  #include <syslog.h>
>  #include "libabrt.h"
> 
> +/* How many problem dirs to create at most?
> + * Also causes cooldown sleep if exceeded -
> + * useful when called from a log watcher.
> + */
> +#define MAX_DUMPED_DD_COUNT  5
> 
>  static bool world_readable_dump = false;
>  static const char *debug_dumps_dir = ".";
> @@ -106,7 +111,7 @@ static char *list_of_tainted_modules(con
>  /* returns number of errors */
>  static unsigned save_oops_to_dump_dir(GList *oops_list, unsigned oops_cnt)
>  {
> -    unsigned countdown = 16; /* do not report hundreds of oopses */
> +    unsigned countdown = MAX_DUMPED_DD_COUNT + 1; /* do not report hundreds
> of oopses */
> 
>      VERB1 log("Saving %u oopses as dump dirs", oops_cnt >= countdown ?
> countdown-1 : oops_cnt);
> 
> @@ -333,8 +338,13 @@ int main(int argc, char **argv)
>              );
>          }
>      }
> -    //list_free_with_free(oops_list);
> +    list_free_with_free(oops_list);
>      //oops_list = NULL;
> 
> +    if (oops_cnt > MAX_DUMPED_DD_COUNT)
> +    {
> +        sleep(oops_cnt - MAX_DUMPED_DD_COUNT);
> +    }
> +
>      return errors;
>  }
> diff -x '*.po' -d -urpN abrt.2/src/plugins/abrt-dump-xorg.c
> abrt.3/src/plugins/abrt-dump-xorg.c ---
> abrt.2/src/plugins/abrt-dump-xorg.c   2013-02-04 12:14:37.000000000 +0100 +++
> abrt.3/src/plugins/abrt-dump-xorg.c   2013-02-05 12:59:05.625968434 +0100 @@
> -35,6 +35,13 @@ enum {
>      OPT_m = 1 << 6,
>  };
> 
> +/* How many problem dirs to create at most?
> + * Also causes cooldown sleep if exceeded -
> + * useful when called from a log watcher.
> + */
> +#define MAX_DUMPED_DD_COUNT  5
> +
> +static unsigned g_bt_count = 0;
>  static unsigned g_opts;
>  static const char *debug_dumps_dir = ".";
>  static unsigned dir_seq_no = 0;
> @@ -208,7 +215,8 @@ static void process_xorg_bt(void)
>          if (g_opts & OPT_o)
>              printf("%s%s%s\n", bt, reason ? reason : "", reason ? "\n" :
> ""); if (g_opts & (OPT_d|OPT_D))
> -            save_bt_to_dump_dir(bt, exe, reason ? reason : "Xorg server
> crashed"); +            if (g_bt_count <= MAX_DUMPED_DD_COUNT)
> +                save_bt_to_dump_dir(bt, exe, reason ? reason : "Xorg server
> crashed"); free(bt);
>      }
>      free(reason);
> @@ -281,11 +289,18 @@ int main(int argc, char **argv)
>          if (strcmp(p, "Backtrace:") == 0)
>          {
>              free(line);
> +            g_bt_count++;
>              process_xorg_bt();
>              continue;
>          }
>          free(line);
>      }
> 
> +    if (opts & (OPT_d|OPT_D))
> +    {
> +        if (g_bt_count > MAX_DUMPED_DD_COUNT)
> +            sleep(g_bt_count - MAX_DUMPED_DD_COUNT);
> +    }
> +
>      return 0;
>  }

Reply via email to