summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog15
-rw-r--r--src/datatypes.c24
-rw-r--r--src/domain_conf.c7
-rw-r--r--src/nodeinfo.c16
-rw-r--r--src/xend_internal.c5
-rw-r--r--tests/sexpr2xmltest.c6
-rw-r--r--tests/testutils.c3
-rw-r--r--tests/xml2sexprtest.c1
8 files changed, 45 insertions, 32 deletions
diff --git a/ChangeLog b/ChangeLog
index 9f939b64f4..2f674b383e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,18 @@
+Wed Apr 1 11:27:22 BST 2009 Daniel P. Berrange <berrange@redhat.com>
+
+ Misc fixes uncovered from OOM testing
+ * src/datatypes.c: Switch to virReportErrorHelper for error
+ reporting, so source line/file/function info is correct
+ * src/domain_conf.c: Check for failure in virXPathNodeSet()
+ * src/noeinfo.c: Translate error strings
+ * src/xend_internal.c: Check for OOM failure after generating
+ SEXPR buffer
+ * tests/sexpr2xmltest.c: Don't unref a NULL connection object.
+ Reset error object between tests. Free capabilities on exit
+ * tests/testutils.c: Fix crash in OOM testing for non-SMP
+ usage
+ * tests/xml2sexprtest.c: Reset error object between tests
+
Wed Apr 1 11:22:22 BST 2009 Daniel P. Berrange <berrange@redhat.com>
Sanitise symlink resolving
diff --git a/src/datatypes.c b/src/datatypes.c
index 3b2c958a01..b1013f201a 100644
--- a/src/datatypes.c
+++ b/src/datatypes.c
@@ -28,31 +28,15 @@
#define VIR_FROM_THIS VIR_FROM_NONE
+#define virLibConnError(conn, code, fmt...) \
+ virReportErrorHelper(conn, VIR_FROM_THIS, code, __FILE__, \
+ __FUNCTION__, __LINE__, fmt)
+
/************************************************************************
* *
* Domain and Connections allocations *
* *
************************************************************************/
-/**
- * virLibConnError:
- * @conn: the connection if available
- * @error: the error number
- * @info: extra information string
- *
- * Handle an error at the connection level
- */
-static void
-virLibConnError(virConnectPtr conn, virErrorNumber error, const char *info)
-{
- const char *errmsg;
-
- if (error == VIR_ERR_OK)
- return;
-
- errmsg = virErrorMsg(error, info);
- virRaiseError(conn, NULL, NULL, VIR_FROM_NONE, error, VIR_ERR_ERROR,
- errmsg, info, NULL, 0, 0, errmsg, info);
-}
/**
* virDomainFreeName:
diff --git a/src/domain_conf.c b/src/domain_conf.c
index 269644983f..3d734148d4 100644
--- a/src/domain_conf.c
+++ b/src/domain_conf.c
@@ -2068,7 +2068,10 @@ static virDomainDefPtr virDomainDefParseXML(virConnectPtr conn,
VIR_FREE(tmp);
}
- if ((n = virXPathNodeSet(conn, "./features/*", ctxt, &nodes)) > 0) {
+ n = virXPathNodeSet(conn, "./features/*", ctxt, &nodes);
+ if (n < 0)
+ goto error;
+ if (n) {
for (i = 0 ; i < n ; i++) {
int val = virDomainFeatureTypeFromString((const char *)nodes[i]->name);
if (val < 0) {
@@ -2079,8 +2082,8 @@ static virDomainDefPtr virDomainDefParseXML(virConnectPtr conn,
}
def->features |= (1 << val);
}
+ VIR_FREE(nodes);
}
- VIR_FREE(nodes);
if (virDomainLifecycleParseXML(conn, ctxt, "string(./on_reboot[1])",
&def->onReboot, VIR_DOMAIN_LIFECYCLE_RESTART) < 0)
diff --git a/src/nodeinfo.c b/src/nodeinfo.c
index bab7197703..9894cd119e 100644
--- a/src/nodeinfo.c
+++ b/src/nodeinfo.c
@@ -74,8 +74,8 @@ int linuxNodeInfoCPUPopulate(virConnectPtr conn, FILE *cpuinfo, virNodeInfoPtr n
buf++;
if (*buf != ':') {
virRaiseError(conn, NULL, NULL, 0, VIR_ERR_INTERNAL_ERROR,
- VIR_ERR_ERROR, NULL, NULL, NULL, 0, 0,
- "parsing cpuinfo processor");
+ VIR_ERR_ERROR, NULL, NULL, NULL, 0, 0,
+ "%s", _("parsing cpuinfo processor"));
return -1;
}
nodeinfo->cpus++;
@@ -87,8 +87,8 @@ int linuxNodeInfoCPUPopulate(virConnectPtr conn, FILE *cpuinfo, virNodeInfoPtr n
buf++;
if (*buf != ':' || !buf[1]) {
virRaiseError(conn, NULL, NULL, 0, VIR_ERR_INTERNAL_ERROR,
- VIR_ERR_ERROR, NULL, NULL, NULL, 0, 0,
- "parsing cpuinfo cpu MHz");
+ VIR_ERR_ERROR, NULL, NULL, NULL, 0, 0,
+ "%s", _("parsing cpuinfo cpu MHz"));
return -1;
}
if (virStrToLong_ui(buf+1, &p, 10, &ui) == 0
@@ -103,8 +103,8 @@ int linuxNodeInfoCPUPopulate(virConnectPtr conn, FILE *cpuinfo, virNodeInfoPtr n
buf++;
if (*buf != ':' || !buf[1]) {
virRaiseError(conn, NULL, NULL, 0, VIR_ERR_INTERNAL_ERROR,
- VIR_ERR_ERROR, NULL, NULL, NULL, 0, 0,
- "parsing cpuinfo cpu cores %c", *buf);
+ VIR_ERR_ERROR, NULL, NULL, NULL, 0, 0,
+ "parsing cpuinfo cpu cores %c", *buf);
return -1;
}
if (virStrToLong_ui(buf+1, &p, 10, &id) == 0
@@ -116,8 +116,8 @@ int linuxNodeInfoCPUPopulate(virConnectPtr conn, FILE *cpuinfo, virNodeInfoPtr n
if (!nodeinfo->cpus) {
virRaiseError(conn, NULL, NULL, 0, VIR_ERR_INTERNAL_ERROR,
- VIR_ERR_ERROR, NULL, NULL, NULL, 0, 0,
- "no cpus found");
+ VIR_ERR_ERROR, NULL, NULL, NULL, 0, 0,
+ "%s", _("no cpus found"));
return -1;
}
diff --git a/src/xend_internal.c b/src/xend_internal.c
index 35918fda10..c00559bffc 100644
--- a/src/xend_internal.c
+++ b/src/xend_internal.c
@@ -5538,6 +5538,11 @@ xenDaemonFormatSxpr(virConnectPtr conn,
virBufferAddLit(&buf, ")"); /* closes (vm */
+ if (virBufferError(&buf)) {
+ virReportOOMError(conn);
+ return NULL;
+ }
+
return virBufferContentAndReset(&buf);
error:
diff --git a/tests/sexpr2xmltest.c b/tests/sexpr2xmltest.c
index 09cf45a5d4..42de88094c 100644
--- a/tests/sexpr2xmltest.c
+++ b/tests/sexpr2xmltest.c
@@ -64,7 +64,8 @@ static int testCompareFiles(const char *xml, const char *sexpr,
fail:
free(gotxml);
virDomainDefFree(def);
- virUnrefConnect(conn);
+ if (conn)
+ virUnrefConnect(conn);
return ret;
}
@@ -115,6 +116,7 @@ mymain(int argc, char **argv)
#define DO_TEST(in, out, version) \
do { \
struct testInfo info = { in, out, version }; \
+ virResetLastError(); \
if (virtTestRun("Xen SEXPR-2-XML " in " -> " out, \
1, testCompareHelper, &info) < 0) \
ret = -1; \
@@ -163,6 +165,8 @@ mymain(int argc, char **argv)
DO_TEST("fv-sound", "fv-sound", 1);
DO_TEST("fv-sound-all", "fv-sound-all", 1);
+ virCapabilitiesFree(caps);
+
return(ret==0 ? EXIT_SUCCESS : EXIT_FAILURE);
}
diff --git a/tests/testutils.c b/tests/testutils.c
index 8d8f82d119..c90d4a9e1f 100644
--- a/tests/testutils.c
+++ b/tests/testutils.c
@@ -409,7 +409,8 @@ int virtTestMain(int argc,
/* Run once for each alloc, failing a different one
and validating that the test case failed */
for (n = 0; n < approxAlloc && (!mp || worker) ; n++) {
- if ((n % mp) != (worker - 1))
+ if (mp &&
+ (n % mp) != (worker - 1))
continue;
if (!testDebug) {
if (mp)
diff --git a/tests/xml2sexprtest.c b/tests/xml2sexprtest.c
index 20528fe9e3..e6b0c4c8a0 100644
--- a/tests/xml2sexprtest.c
+++ b/tests/xml2sexprtest.c
@@ -95,6 +95,7 @@ mymain(int argc, char **argv)
#define DO_TEST(in, out, name, version) \
do { \
struct testInfo info = { in, out, name, version }; \
+ virResetLastError(); \
if (virtTestRun("Xen XML-2-SEXPR " in " -> " out, \
1, testCompareHelper, &info) < 0) \
ret = -1; \