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;
> }