mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-01 17:35:17 +00:00
Misc fixes uncovered by OOM testing
This commit is contained in:
parent
dab6391f2d
commit
e4c65831e3
15
ChangeLog
15
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
|
||||
|
@ -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:
|
||||
|
@ -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)
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -5538,6 +5538,11 @@ xenDaemonFormatSxpr(virConnectPtr conn,
|
||||
|
||||
virBufferAddLit(&buf, ")"); /* closes (vm */
|
||||
|
||||
if (virBufferError(&buf)) {
|
||||
virReportOOMError(conn);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return virBufferContentAndReset(&buf);
|
||||
|
||||
error:
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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; \
|
||||
|
Loading…
x
Reference in New Issue
Block a user