Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
libvirt
提交
8c5ce294
L
libvirt
项目概览
openeuler
/
libvirt
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
L
libvirt
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
8c5ce294
编写于
10月 06, 2006
作者:
D
Daniel P. Berrange
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fixed multiple memory leaks & make test suite check for leaks with valgrind
上级
18351e0f
变更
6
显示空白变更内容
内联
并排
Showing
6 changed file
with
87 addition
and
42 deletion
+87
-42
ChangeLog
ChangeLog
+12
-0
src/xend_internal.c
src/xend_internal.c
+8
-8
src/xml.c
src/xml.c
+40
-21
tests/Makefile.am
tests/Makefile.am
+1
-1
tests/sexpr2xmltest.c
tests/sexpr2xmltest.c
+11
-5
tests/xml2sexprtest.c
tests/xml2sexprtest.c
+15
-7
未找到文件。
ChangeLog
浏览文件 @
8c5ce294
Fri Oct 6 10:33:20 EDT 2006 Daniel P. Berrange <berrange@redhat.com>
* src/xend_internal.c: Fixed memory leak in xend_get_config_version
routine.
* src/xml.c: Fixed memory leaks in XML parsing routines relating
to VNC port, HVM boot devices, HVM floppy & CDROM, HVM features,
disk device type.
* tests/Makefile.am: Use --leak-check=full when running valgrind
to detect all leaks, in addition to memory corruption checks
* tests/sexpr2xmltest.c, tests/xml2sexprtest.c: Fixed memory leaks
in test harness leading to valgrind false-positives.
Mon Oct 2 23:16:06 CEST 2006 Daniel Veillard <veillard@redhat.com>
* src/xen_internal.c: Daniel Berrange fixed some mlock size problem
...
...
src/xend_internal.c
浏览文件 @
8c5ce294
...
...
@@ -1260,7 +1260,6 @@ xend_get_node(virConnectPtr xend)
static
int
xend_get_config_version
(
virConnectPtr
conn
)
{
int
ret
=
-
1
;
struct
sexpr
*
root
;
const
char
*
value
;
...
...
@@ -1276,15 +1275,16 @@ xend_get_config_version(virConnectPtr conn) {
value
=
sexpr_node
(
root
,
"node/xend_config_format"
);
if
(
value
)
{
return
strtol
(
value
,
NULL
,
10
);
}
else
{
/* Xen prior to 3.0.3 did not have the xend_config_format
field, and is implicitly version 1. */
return
1
;
int
version
=
strtol
(
value
,
NULL
,
10
);
sexpr_free
(
root
);
return
version
;
}
sexpr_free
(
root
);
return
(
ret
);
/* Xen prior to 3.0.3 did not have the xend_config_format
field, and is implicitly version 1. */
return
1
;
}
...
...
src/xml.c
浏览文件 @
8c5ce294
...
...
@@ -598,18 +598,16 @@ static int virDomainParseXMLGraphicsDesc(xmlNodePtr node, virBufferPtr buf, int
//virBufferAdd(buf, "(xauthority /root/.Xauthority)", 30);
}
else
if
(
xmlStrEqual
(
graphics_type
,
BAD_CAST
"vnc"
))
{
xmlChar
*
vncport
=
NULL
;
long
port
;
virBufferAdd
(
buf
,
"(vnc 1)"
,
7
);
if
(
xendConfigVersion
>=
2
)
{
vncport
=
xmlGetProp
(
node
,
BAD_CAST
"port"
);
xmlChar
*
vncport
=
xmlGetProp
(
node
,
BAD_CAST
"port"
);
if
(
vncport
!=
NULL
)
{
port
=
strtol
((
const
char
*
)
vncport
,
NULL
,
10
);
long
port
=
strtol
((
const
char
*
)
vncport
,
NULL
,
10
);
if
(
port
==
-
1
)
virBufferAdd
(
buf
,
"(vncunused 1)"
,
13
);
else
if
(
port
>
5900
)
virBufferVSprintf
(
buf
,
"(vncdisplay %d)"
,
port
-
5900
);
xmlFree
(
vncport
);
}
}
}
...
...
@@ -638,9 +636,9 @@ virDomainParseXMLOSDescHVM(xmlNodePtr node, virBufferPtr buf, xmlXPathContextPtr
{
xmlXPathObjectPtr
obj
=
NULL
;
xmlNodePtr
cur
,
txt
;
const
xmlChar
*
type
=
NULL
;
const
xmlChar
*
loader
=
NULL
;
const
xmlChar
*
boot_dev
=
NULL
;
xmlChar
*
type
=
NULL
;
xmlChar
*
loader
=
NULL
;
xmlChar
*
boot_dev
=
NULL
;
int
res
;
cur
=
node
->
children
;
...
...
@@ -720,9 +718,12 @@ virDomainParseXMLOSDescHVM(xmlNodePtr node, virBufferPtr buf, xmlXPathContextPtr
obj
=
xmlXPathEval
(
BAD_CAST
"/domain/devices/disk[@device='floppy' and target/@dev='fdb']/source"
,
ctxt
);
if
((
obj
!=
NULL
)
&&
(
obj
->
type
==
XPATH_NODESET
)
&&
(
obj
->
nodesetval
!=
NULL
)
&&
(
obj
->
nodesetval
->
nodeNr
==
1
))
{
xmlChar
*
fdfile
=
NULL
;
cur
=
obj
->
nodesetval
->
nodeTab
[
0
];
fdfile
=
xmlGetProp
(
cur
,
BAD_CAST
"file"
);
virBufferVSprintf
(
buf
,
"(fdb '%s')"
,
(
const
char
*
)
xmlGetProp
(
cur
,
BAD_CAST
"file"
));
(
const
char
*
)
fdfile
);
xmlFree
(
fdfile
);
cur
=
NULL
;
}
if
(
obj
)
{
...
...
@@ -737,9 +738,12 @@ virDomainParseXMLOSDescHVM(xmlNodePtr node, virBufferPtr buf, xmlXPathContextPtr
obj
=
xmlXPathEval
(
BAD_CAST
"/domain/devices/disk[@device='cdrom' and target/@dev='hdc']/source"
,
ctxt
);
if
((
obj
!=
NULL
)
&&
(
obj
->
type
==
XPATH_NODESET
)
&&
(
obj
->
nodesetval
!=
NULL
)
&&
(
obj
->
nodesetval
->
nodeNr
==
1
))
{
xmlChar
*
cdfile
=
NULL
;
cur
=
obj
->
nodesetval
->
nodeTab
[
0
];
cdfile
=
xmlGetProp
(
cur
,
BAD_CAST
"file"
);
virBufferVSprintf
(
buf
,
"(cdrom '%s')"
,
(
const
char
*
)
xmlGetProp
(
cur
,
BAD_CAST
"file"
));
(
const
char
*
)
cdfile
);
xmlFree
(
cdfile
);
cur
=
NULL
;
}
if
(
obj
)
{
...
...
@@ -752,24 +756,25 @@ virDomainParseXMLOSDescHVM(xmlNodePtr node, virBufferPtr buf, xmlXPathContextPtr
if
((
obj
!=
NULL
)
&&
(
obj
->
type
==
XPATH_NODESET
)
&&
(
obj
->
nodesetval
!=
NULL
)
&&
(
obj
->
nodesetval
->
nodeNr
==
1
))
{
virBufferAdd
(
buf
,
"(acpi 1)"
,
8
);
xmlXPathFreeObject
(
obj
);
obj
=
NULL
;
}
if
(
obj
)
xmlXPathFreeObject
(
obj
);
obj
=
xmlXPathEval
(
BAD_CAST
"/domain/features/apic"
,
ctxt
);
if
((
obj
!=
NULL
)
&&
(
obj
->
type
==
XPATH_NODESET
)
&&
(
obj
->
nodesetval
!=
NULL
)
&&
(
obj
->
nodesetval
->
nodeNr
==
1
))
{
virBufferAdd
(
buf
,
"(apic 1)"
,
8
);
xmlXPathFreeObject
(
obj
);
obj
=
NULL
;
}
if
(
obj
)
xmlXPathFreeObject
(
obj
);
obj
=
xmlXPathEval
(
BAD_CAST
"/domain/features/pae"
,
ctxt
);
if
((
obj
!=
NULL
)
&&
(
obj
->
type
==
XPATH_NODESET
)
&&
(
obj
->
nodesetval
!=
NULL
)
&&
(
obj
->
nodesetval
->
nodeNr
==
1
))
{
virBufferAdd
(
buf
,
"(pae 1)"
,
7
);
}
if
(
obj
)
xmlXPathFreeObject
(
obj
);
obj
=
NULL
;
}
}
obj
=
xmlXPathEval
(
BAD_CAST
"count(domain/devices/console) > 0"
,
ctxt
);
if
((
obj
==
NULL
)
||
(
obj
->
type
!=
XPATH_BOOLEAN
))
{
...
...
@@ -795,8 +800,13 @@ virDomainParseXMLOSDescHVM(xmlNodePtr node, virBufferPtr buf, xmlXPathContextPtr
virBufferAdd
(
buf
,
"))"
,
2
);
if
(
boot_dev
)
xmlFree
(
boot_dev
);
return
(
0
);
error:
if
(
boot_dev
)
xmlFree
(
boot_dev
);
if
(
obj
!=
NULL
)
xmlXPathFreeObject
(
obj
);
return
(
-
1
);
...
...
@@ -960,12 +970,16 @@ virDomainParseXMLDiskDesc(xmlNodePtr node, virBufferPtr buf, int hvm, int xendCo
if
(
target
!=
NULL
)
xmlFree
(
target
);
if
(
device
!=
NULL
)
xmlFree
(
device
);
return
(
-
1
);
}
if
(
target
==
NULL
)
{
virXMLError
(
VIR_ERR_NO_TARGET
,
(
const
char
*
)
source
,
0
);
if
(
source
!=
NULL
)
xmlFree
(
source
);
if
(
device
!=
NULL
)
xmlFree
(
device
);
return
(
-
1
);
}
...
...
@@ -975,7 +989,7 @@ virDomainParseXMLDiskDesc(xmlNodePtr node, virBufferPtr buf, int hvm, int xendCo
if
(
hvm
&&
device
&&
!
strcmp
((
const
char
*
)
device
,
"floppy"
))
{
return
0
;
goto
cleanup
;
}
/* Xend <= 3.0.2 doesn't include cdrom config here */
...
...
@@ -983,7 +997,7 @@ virDomainParseXMLDiskDesc(xmlNodePtr node, virBufferPtr buf, int hvm, int xendCo
device
&&
!
strcmp
((
const
char
*
)
device
,
"cdrom"
))
{
if
(
xendConfigVersion
==
1
)
return
0
;
goto
cleanup
;
else
cdrom
=
1
;
}
...
...
@@ -1021,6 +1035,9 @@ virDomainParseXMLDiskDesc(xmlNodePtr node, virBufferPtr buf, int hvm, int xendCo
virBufferAdd
(
buf
,
")"
,
1
);
virBufferAdd
(
buf
,
")"
,
1
);
cleanup:
xmlFree
(
device
);
xmlFree
(
target
);
xmlFree
(
source
);
return
(
0
);
...
...
@@ -1302,6 +1319,8 @@ virDomainParseXMLDesc(const char *xmldesc, char **name, int xendConfigVersion)
if
(
name
!=
NULL
)
*
name
=
nam
;
else
free
(
nam
);
return
(
ret
);
...
...
tests/Makefile.am
浏览文件 @
8c5ce294
...
...
@@ -25,7 +25,7 @@ noinst_PROGRAMS = xmlrpctest xml2sexprtest sexpr2xmltest virshtest conftest \
TESTS
=
xml2sexprtest sexpr2xmltest virshtest test_conf.sh reconnect
valgrind
:
$(MAKE)
check
TESTS_ENVIRONMENT
=
"valgrind --quiet"
$(MAKE)
check
TESTS_ENVIRONMENT
=
"valgrind --quiet
--leak-check=full
"
# Note: xmlrpc.[c|h] is not in libvirt yet
xmlrpctest_SOURCES
=
\
...
...
tests/sexpr2xmltest.c
浏览文件 @
8c5ce294
...
...
@@ -17,24 +17,30 @@ static int testCompareFiles(const char *xml, const char *sexpr, int xendConfigVe
char
*
gotxml
=
NULL
;
char
*
xmlPtr
=
&
(
xmlData
[
0
]);
char
*
sexprPtr
=
&
(
sexprData
[
0
]);
int
ret
=
-
1
;
if
(
virtTestLoadFile
(
xml
,
&
xmlPtr
,
MAX_FILE
)
<
0
)
return
-
1
;
goto
fail
;
if
(
virtTestLoadFile
(
sexpr
,
&
sexprPtr
,
MAX_FILE
)
<
0
)
return
-
1
;
goto
fail
;
if
(
!
(
gotxml
=
xend_parse_domain_sexp
(
NULL
,
sexprData
,
xendConfigVersion
)))
return
-
1
;
goto
fail
;
if
(
getenv
(
"DEBUG_TESTS"
))
{
printf
(
"Expect %d '%s'
\n
"
,
(
int
)
strlen
(
xmlData
),
xmlData
);
printf
(
"Actual %d '%s'
\n
"
,
(
int
)
strlen
(
gotxml
),
gotxml
);
}
if
(
strcmp
(
xmlData
,
gotxml
))
return
-
1
;
goto
fail
;
return
0
;
ret
=
0
;
fail:
free
(
gotxml
);
return
ret
;
}
static
int
testComparePVversion1
(
void
*
data
ATTRIBUTE_UNUSED
)
{
...
...
tests/xml2sexprtest.c
浏览文件 @
8c5ce294
...
...
@@ -17,27 +17,35 @@ static int testCompareFiles(const char *xml, const char *sexpr, const char *name
char
*
gotsexpr
=
NULL
;
char
*
xmlPtr
=
&
(
xmlData
[
0
]);
char
*
sexprPtr
=
&
(
sexprData
[
0
]);
int
ret
=
-
1
;
if
(
virtTestLoadFile
(
xml
,
&
xmlPtr
,
MAX_FILE
)
<
0
)
return
-
1
;
goto
fail
;
if
(
virtTestLoadFile
(
sexpr
,
&
sexprPtr
,
MAX_FILE
)
<
0
)
return
-
1
;
goto
fail
;
if
(
!
(
gotsexpr
=
virDomainParseXMLDesc
(
xmlData
,
&
gotname
,
xendConfigVersion
)))
return
-
1
;
goto
fail
;
if
(
getenv
(
"DEBUG_TESTS"
))
{
printf
(
"Expect %d '%s'
\n
"
,
(
int
)
strlen
(
sexprData
),
sexprData
);
printf
(
"Actual %d '%s'
\n
"
,
(
int
)
strlen
(
gotsexpr
),
gotsexpr
);
}
if
(
strcmp
(
sexprData
,
gotsexpr
))
return
-
1
;
goto
fail
;
if
(
strcmp
(
name
,
gotname
))
return
-
1
;
goto
fail
;
return
0
;
ret
=
0
;
fail:
free
(
gotname
);
free
(
gotsexpr
);
return
ret
;
}
static
int
testComparePVversion1
(
void
*
data
ATTRIBUTE_UNUSED
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录