
On 04/02/2013 08:22 AM, Michal Privoznik wrote:
--- src/libvirt_private.syms | 1 + src/qemu/qemu_domain.c | 4 +--- src/util/viraudit.c | 2 +- src/util/vircommand.c | 4 ++-- src/util/virerror.c | 2 +- src/util/virlog.c | 2 +- src/util/virstring.c | 22 ++++++++++++++++++++-- src/util/virstring.h | 3 +++ 8 files changed, 30 insertions(+), 10 deletions(-)
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 5060b87..8d1abe7 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -1742,6 +1742,7 @@ virStrToLong_ul; virStrToLong_ull; virTrimSpaces; virVasprintf; +virVasprintfNOOM;
Bike-shedding: Maybe virVasprintfQuiet works better? I'm a bit worried that the NOOM suffix will cause more questions than it resolves about what it is really doing, which is being silent on OOM conditions.
+++ b/src/qemu/qemu_domain.c @@ -1477,10 +1477,8 @@ int qemuDomainAppendLog(virQEMUDriverPtr driver, (fd = qemuDomainCreateLog(driver, obj, true)) < 0) goto cleanup;
- if (virVasprintf(&message, fmt, argptr) < 0) { - virReportOOMError(); + if (virVasprintf(&message, fmt, argptr) < 0) goto cleanup; - }
This hunk looks like it is in the wrong patch. Probably meant for 5/5?
+++ b/src/util/viraudit.c @@ -96,7 +96,7 @@ void virAuditSend(const char *filename, #endif
va_start(args, fmt); - if (virVasprintf(&str, fmt, args) < 0) { + if (virVasprintfNOOM(&str, fmt, args) < 0) { VIR_WARN("Out of memory while formatting audit message"); str = NULL;
The str=NULL assignment is redundant with the guarantees of virVasprintf*(), if you want to clean that up while you are touching this area of code.
+++ b/src/util/virerror.c @@ -649,7 +649,7 @@ virRaiseErrorFull(const char *filename ATTRIBUTE_UNUSED, } else { va_list ap; va_start(ap, fmt); - ignore_value(virVasprintf(&str, fmt, ap)); + ignore_value(virVasprintfNOOM(&str, fmt, ap));
Given how seldom virVasprintfNOOM (or whatever name we give it) will be used, it probably doesn't need ATTRIBUTE_RETURN_CHECK. After all, if you know you don't care about an error being raised, then the compiler shouldn't make you care about a successful return value either.
@@ -327,6 +327,23 @@ virVasprintf(char **strp, const char *fmt, va_list list) }
/** + * virVasprintf + * + * like glibc's vasprintf but makes sure *strp == NULL on failure and reports + * OOM error. + */ +int +virVasprintf(char **strp, const char *fmt, va_list list) +{ + int ret; + + if ((ret = virVasprintfNOOM(strp, fmt, list)) == -1)
s/== -1/< 0/ The idea makes sense, and the choices that you converted over to using the silent variant look correct, but a v2 might be useful, particularly after my comments on 2/5 about splitting the series differently. Anyone else with a better idea for a name? -- Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org