|
| From: | Eric Blake |
| Subject: | Re: [Qemu-devel] [PATCH RFC] qemu-error: introduce error_report_once |
| Date: | Tue, 15 May 2018 10:29:39 -0500 |
| User-agent: | Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.7.0 |
On 05/15/2018 04:13 AM, Peter Xu wrote:
I stole the printk_once() macro. I always wanted to be able to print some error directly if there is a buffer to dump, however we can't use error_report() really quite often when there can be any DDOS attack. To avoid that, we can introduce a print-once function for it. CC: Markus Armbruster <address@hidden> Signed-off-by: Peter Xu <address@hidden> --- We can for sure introduce similar functions for the rest of the error_*() functions, it's just an idea to see whether we'd like it in general. --- include/qemu/error-report.h | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/include/qemu/error-report.h b/include/qemu/error-report.h index e1c8ae1a52..efebb80e2c 100644 --- a/include/qemu/error-report.h +++ b/include/qemu/error-report.h @@ -44,6 +44,18 @@ void error_report(const char *fmt, ...) GCC_FMT_ATTR(1, 2); void warn_report(const char *fmt, ...) GCC_FMT_ATTR(1, 2); void info_report(const char *fmt, ...) GCC_FMT_ATTR(1, 2);+#define error_report_once(fmt, ...) \+ ({ \ + static bool __print_once; \
Double-underscore names are reserved for the compiler's use, not ours. Better would be naming this:
static bool print_once_; with a trailing underscore, or at most a single leading underscore.
+ bool __ret_print_once = !__print_once; \
Same comment for this variable.
+ \
+ if (!__print_once) { \
+ __print_once = true; \
+ error_report(fmt, ##__VA_ARGS__); \
+ } \
+ unlikely(__ret_print_once); \
+ })
+
const char *error_get_progname(void);
extern bool enable_timestamp_msg;
-- Eric Blake, Principal Software Engineer Red Hat, Inc. +1-919-301-3266 Virtualization: qemu.org | libvirt.org
| [Prev in Thread] | Current Thread | [Next in Thread] |