[RHEL^ ABRT PATCH] abrt-dump-oops: limit amount of created dirs, add cooldown sleep if exceeded. rhbz#952773
Denys Vlasenko
dvlasenk at redhat.com
Wed Jun 12 12:33:21 UTC 2013
This is a partial backport of 6fc121f145354dd95bb588eb685f1593f5156ca0.
Signed-off-by: Denys Vlasenko <dvlasenk at redhat.com>
---
src/plugins/abrt-dump-oops.c | 17 +++++++++++++++--
1 file changed, 15 insertions(+), 2 deletions(-)
diff --git a/src/plugins/abrt-dump-oops.c b/src/plugins/abrt-dump-oops.c
index 85ca2c0..0dbe7fe 100644
--- a/src/plugins/abrt-dump-oops.c
+++ b/src/plugins/abrt-dump-oops.c
@@ -21,6 +21,11 @@
#include <sys/inotify.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 = ".";
@@ -110,8 +115,8 @@ static int scan_syslog_file(GList **oops_list, int fd, struct stat *statbuf, int
/* 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 idx = 0; //oops_cnt;
+ unsigned countdown = MAX_DUMPED_DD_COUNT + 1; /* do not report hundreds of oopses */
+ unsigned idx = 0;
VERB1 log("Saving %u oopses as dump dirs", oops_cnt >= countdown ? countdown-1 : oops_cnt);
@@ -207,6 +212,14 @@ static unsigned save_oops_to_dump_dir(GList *oops_list, unsigned oops_cnt)
free(cmdline_str);
+ /* This delays log rescan
+ * and possibly prevents dreaded "abrt storm".
+ */
+ if (oops_cnt > MAX_DUMPED_DD_COUNT)
+ {
+ sleep(oops_cnt - MAX_DUMPED_DD_COUNT);
+ }
+
return errors;
}
--
1.8.1.4
More information about the Crash-catcher
mailing list