[libvirt] use virReportOOMError, not VIR_ERR_NO_MEMORY

Jim Meyering jim at meyering.net
Tue Jan 27 15:57:58 UTC 2009


I've changed over 200 uses of <some_error_function> with the
VIR_ERR_NO_MEMORY flag to call virReportOOMError with whatever
"conn"-like argument (if any) was in the original call.

I don't claim to have tested these changes (OOM is a pain to simulate,
and besides, testing so many failure points would take more
infrastructure than we have right now).

However, I did automate most of the process.
most of the changes were performed automatically via this:

perl -0x0 -pi -e \
  's/\w+( ?)\(([\w>-]+), *(?:(?:VIR_FROM_NONE|domcode|vm|dom|net|NULL), ?){0,3}VIR_ERR_NO_MEMORY,.*?\);/virReportOOMError$1($2);/sg' \
   $(g grep -l VIR_ERR_NO_MEMORY|grep '\.c$'|grep -vF virterror.c)


Exceptions:
======================
Exceptions (as noted in ChangeLog) were to add the now-required
definitions of VIR_FROM_THIS, as needed, e.g.,

    #define VIR_FROM_THIS VIR_FROM_OPENVZ

in openvz-related files.

Also, I replaced uses of qparam_report_oom automatically:

  perl -pi -e 's/qparam_report_oom\(\);/virReportOOMError(NULL);/' \
    src/qparams.c

and removed the definition of that macro manually.

I spotted and manually adjusted one misuse of VIR_ERR_NO_MEMORY:

    remote_internal.c: fix typo that would mistakenly report OOM
    * src/remote_internal.c (addrToString): Report VIR_ERR_UNKNOWN_HOST,
    not VIR_ERR_NO_MEMORY.

ctxt in src/conf.c is not usable:

    perl -pi -e 's/virReportOOMError\(ctxt\);/virReportOOMError(NULL);/' \
      src/conf.c

I manually converted two uses of virSexprError(VIR_ERR_NO_MEMORY in
src/sexpr.c.

And of course, copyright dates were updated via an emacs write hook.

The first iteration involved applying the perl-based xforms
more of less file by file, and making sure everything still compiled.
Once done, I repeated the process on a new branch, automating as much
as possible, and then diff'd the branches.  The diff was nearly empty,
modulo copyright dates and added VIR_FROM_THIS definitions.

I'm posting two small sort-of-different changes here.
I'll post this big first one separately.

>From 099536470ae2cbe9503ed471d391e403fb2587a4 Mon Sep 17 00:00:00 2001
From: Jim Meyering <meyering at redhat.com>
Date: Tue, 27 Jan 2009 12:20:06 +0100
Subject: [PATCH 1/3] error-reporting calls using VIR_ERR_NO_MEMORY: use virReportOOMError instead

* src/uml_conf.c (VIR_FROM_THIS): Define to VIR_FROM_UML.
* src/xs_internal.c (VIR_FROM_THIS): Define to VIR_FROM_XEN.
* src/xml.c (VIR_FROM_THIS): Define to VIR_FROM_XML.
* src/stats_linux.c (VIR_FROM_THIS): Define to VIR_FROM_STATS_LINUX.
* src/datatypes.c (VIR_FROM_THIS): Define to VIR_FROM_NONE.
* src/lxc_conf.c (VIR_FROM_THIS): Define to VIR_FROM_LXC.
* src/libvirt.c (VIR_FROM_THIS): Define to VIR_FROM_NONE.
* src/node_device_conf.c (VIR_FROM_THIS): Define to VIR_FROM_NODEDEV.
* src/openvz_conf.c (VIR_FROM_THIS): Define to VIR_FROM_OPENVZ.
* src/openvz_driver.c (VIR_FROM_THIS): Define to VIR_FROM_OPENVZ.
* src/conf.c (VIR_FROM_THIS): Define to VIR_FROM_CONF.
Note: this loses config_filename:config_lineno diagnostics,
but that's ok.
* src/node_device.c (VIR_FROM_THIS): Define to VIR_FROM_NODEDEV.
* src/sexpr.c (VIR_FROM_THIS): Define to VIR_FROM_SEXPR.
---
...

>From a223b8f6064e867d304df9a0a1498ef2940631ef Mon Sep 17 00:00:00 2001
From: Jim Meyering <meyering at redhat.com>
Date: Tue, 27 Jan 2009 15:58:07 +0100
Subject: [PATCH 2/3] qparams.c: Use virReportOOMError(NULL), not qparam_report_oom()

* src/qparams.c (VIR_FROM_THIS): Define to VIR_FROM_NONE.
(qparam_report_oom): Remove definition.
Replace all uses.
---
 src/qparams.c |   22 ++++++++++------------
 1 files changed, 10 insertions(+), 12 deletions(-)

diff --git a/src/qparams.c b/src/qparams.c
index 22c5853..d0a84b3 100644
--- a/src/qparams.c
+++ b/src/qparams.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2007 Red Hat, Inc.
+/* Copyright (C) 2007, 2009 Red Hat, Inc.
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -33,9 +33,7 @@
 #include "memory.h"
 #include "qparams.h"

-#define qparam_report_oom(void)                                              \
-        virReportErrorHelper(NULL, VIR_FROM_NONE, VIR_ERR_NO_MEMORY,       \
-                               __FILE__, __FUNCTION__, __LINE__, NULL)
+#define VIR_FROM_THIS VIR_FROM_NONE

 struct qparam_set *
 new_qparam_set (int init_alloc, ...)
@@ -47,14 +45,14 @@ new_qparam_set (int init_alloc, ...)
     if (init_alloc <= 0) init_alloc = 1;

     if (VIR_ALLOC(ps) < 0) {
-        qparam_report_oom();
+        virReportOOMError(NULL);
         return NULL;
     }
     ps->n = 0;
     ps->alloc = init_alloc;
     if (VIR_ALLOC_N(ps->p, ps->alloc) < 0) {
         VIR_FREE (ps);
-        qparam_report_oom();
+        virReportOOMError(NULL);
         return NULL;
     }

@@ -98,7 +96,7 @@ grow_qparam_set (struct qparam_set *ps)
 {
     if (ps->n >= ps->alloc) {
         if (VIR_REALLOC_N(ps->p, ps->alloc * 2) < 0) {
-            qparam_report_oom();
+            virReportOOMError(NULL);
             return -1;
         }
         ps->alloc *= 2;
@@ -115,14 +113,14 @@ append_qparam (struct qparam_set *ps,

     pname = strdup (name);
     if (!pname) {
-        qparam_report_oom();
+        virReportOOMError(NULL);
         return -1;
     }

     pvalue = strdup (value);
     if (!pvalue) {
         VIR_FREE (pname);
-        qparam_report_oom();
+        virReportOOMError(NULL);
         return -1;
     }

@@ -156,7 +154,7 @@ qparam_get_query (const struct qparam_set *ps)
     }

     if (virBufferError(&buf)) {
-        qparam_report_oom();
+        virReportOOMError(NULL);
         return NULL;
     }

@@ -184,7 +182,7 @@ qparam_query_parse (const char *query)

     ps = new_qparam_set (0, NULL);
     if (!ps) {
-        qparam_report_oom();
+        virReportOOMError(NULL);
         return NULL;
     }

@@ -257,7 +255,7 @@ qparam_query_parse (const char *query)
     return ps;

  out_of_memory:
-    qparam_report_oom();
+    virReportOOMError(NULL);
     free_qparam_set (ps);
     return NULL;
 }
--
1.6.1.1.363.g2a3bd


>From dd9477353e930ba75dea1e06ccbced5b1cb61e09 Mon Sep 17 00:00:00 2001
From: Jim Meyering <meyering at redhat.com>
Date: Tue, 27 Jan 2009 15:53:27 +0100
Subject: [PATCH 3/3] remote_internal.c: fix typo that would mistakenly report OOM

* src/remote_internal.c (addrToString): Report VIR_ERR_UNKNOWN_HOST,
not VIR_ERR_NO_MEMORY.
---
 src/remote_internal.c |   11 +++++------
 1 files changed, 5 insertions(+), 6 deletions(-)

diff --git a/src/remote_internal.c b/src/remote_internal.c
index 8ed52bc..5c2e705 100644
--- a/src/remote_internal.c
+++ b/src/remote_internal.c
@@ -2,7 +2,7 @@
  * remote_internal.c: driver to provide access to libvirtd running
  *   on a remote machine
  *
- * Copyright (C) 2007-2008 Red Hat, Inc.
+ * Copyright (C) 2007-2009 Red Hat, Inc.
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -4949,10 +4949,10 @@ static char *addrToString(struct sockaddr_storage *sa, socklen_t salen)
                            port, sizeof(port),
                            NI_NUMERICHOST | NI_NUMERICSERV)) != 0) {
         virRaiseError (NULL, NULL, NULL, VIR_FROM_REMOTE,
-                         VIR_ERR_NO_MEMORY, VIR_ERR_ERROR,
-                         NULL, NULL, NULL, 0, 0,
-                         _("Cannot resolve address %d: %s"),
-                         err, gai_strerror(err));
+                       VIR_ERR_UNKNOWN_HOST, VIR_ERR_ERROR,
+                       NULL, NULL, NULL, 0, 0,
+                       _("Cannot resolve address %d: %s"),
+                       err, gai_strerror(err));
         return NULL;
     }

@@ -6836,4 +6836,3 @@ remoteRegister (void)

     return 0;
 }
-
--
1.6.1.1.363.g2a3bd




More information about the libvir-list mailing list