Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
libvirt
提交
c8695053
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,发现更多精彩内容 >>
提交
c8695053
编写于
7月 15, 2013
作者:
M
Michal Privoznik
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
lxc: switch to virCloseCallbacks API
上级
4deeb74d
变更
7
显示空白变更内容
内联
并排
Showing
7 changed file
with
53 addition
and
103 deletion
+53
-103
src/libvirt_private.syms
src/libvirt_private.syms
+1
-0
src/lxc/lxc_conf.h
src/lxc/lxc_conf.h
+3
-5
src/lxc/lxc_driver.c
src/lxc/lxc_driver.c
+3
-3
src/lxc/lxc_process.c
src/lxc/lxc_process.c
+19
-94
src/lxc/lxc_process.h
src/lxc/lxc_process.h
+0
-1
src/util/virclosecallbacks.c
src/util/virclosecallbacks.c
+24
-0
src/util/virclosecallbacks.h
src/util/virclosecallbacks.h
+3
-0
未找到文件。
src/libvirt_private.syms
浏览文件 @
c8695053
...
...
@@ -1206,6 +1206,7 @@ virCgroupSetMemSwapHardLimit;
# util/virclosecallbacks.h
virCloseCallbacksGet;
virCloseCallbacksGetConn;
virCloseCallbacksNew;
virCloseCallbacksRun;
virCloseCallbacksSet;
...
...
src/lxc/lxc_conf.h
浏览文件 @
c8695053
...
...
@@ -35,6 +35,7 @@
# include "vircgroup.h"
# include "virsysinfo.h"
# include "virusb.h"
# include "virclosecallbacks.h"
# define LXC_DRIVER_NAME "LXC"
...
...
@@ -101,11 +102,8 @@ struct _virLXCDriver {
/* Immutable pointer. self-locking APIs */
virSecurityManagerPtr
securityManager
;
/* Mapping of 'char *uuidstr' -> virConnectPtr
* of guests which will be automatically killed
* when the virConnectPtr is closed.
* Immutable pointer. Unsafe APIs. XXX */
virHashTablePtr
autodestroy
;
/* Immutable pointer, self-locking APIs */
virCloseCallbacksPtr
closeCallbacks
;
};
virLXCDriverConfigPtr
virLXCDriverConfigNew
(
void
);
...
...
src/lxc/lxc_driver.c
浏览文件 @
c8695053
...
...
@@ -163,7 +163,7 @@ static int lxcConnectClose(virConnectPtr conn)
virLXCDriverPtr
driver
=
conn
->
privateData
;
lxcDriverLock
(
driver
);
vir
LXCProcessAutoDestroyRun
(
driver
,
conn
);
vir
CloseCallbacksRun
(
driver
->
closeCallbacks
,
conn
,
driver
->
domains
,
driver
);
lxcDriverUnlock
(
driver
);
conn
->
privateData
=
NULL
;
...
...
@@ -1591,7 +1591,7 @@ static int lxcStateInitialize(bool privileged,
if
(
!
(
lxc_driver
->
xmlopt
=
lxcDomainXMLConfInit
()))
goto
cleanup
;
if
(
virLXCProcessAutoDestroyInit
(
lxc_driver
)
<
0
)
if
(
!
(
lxc_driver
->
closeCallbacks
=
virCloseCallbacksNew
())
)
goto
cleanup
;
/* Get all the running persistent or transient configs first */
...
...
@@ -1681,7 +1681,7 @@ static int lxcStateCleanup(void)
virObjectUnref
(
lxc_driver
->
domains
);
virDomainEventStateFree
(
lxc_driver
->
domainEventState
);
vir
LXCProcessAutoDestroyShutdown
(
lxc_driver
);
vir
ObjectUnref
(
lxc_driver
->
closeCallbacks
);
virSysinfoDefFree
(
lxc_driver
->
hostsysinfo
);
...
...
src/lxc/lxc_process.c
浏览文件 @
c8695053
...
...
@@ -54,122 +54,45 @@
#define START_POSTFIX ": starting up\n"
int
virLXCProcessAutoDestroyInit
(
virLXCDriverPtr
driver
)
{
if
(
!
(
driver
->
autodestroy
=
virHashCreate
(
5
,
NULL
)))
return
-
1
;
return
0
;
}
struct
virLXCProcessAutoDestroyData
{
virLXCDriverPtr
driver
;
virConnectPtr
conn
;
};
static
void
virLXCProcessAutoDestroyDom
(
void
*
payload
,
const
void
*
name
,
static
virDomainObjPtr
lxcProcessAutoDestroy
(
virDomainObjPtr
dom
,
virConnectPtr
conn
,
void
*
opaque
)
{
struct
virLXCProcessAutoDestroyData
*
data
=
opaque
;
virConnectPtr
conn
=
payload
;
const
char
*
uuidstr
=
name
;
unsigned
char
uuid
[
VIR_UUID_BUFLEN
];
virDomainObjPtr
dom
;
virLXCDriverPtr
driver
=
opaque
;
virDomainEventPtr
event
=
NULL
;
virLXCDomainObjPrivatePtr
priv
;
VIR_DEBUG
(
"conn=%p uuidstr=%s thisconn=%p"
,
conn
,
uuidstr
,
data
->
conn
);
if
(
data
->
conn
!=
conn
)
return
;
if
(
virUUIDParse
(
uuidstr
,
uuid
)
<
0
)
{
VIR_WARN
(
"Failed to parse %s"
,
uuidstr
);
return
;
}
if
(
!
(
dom
=
virDomainObjListFindByUUID
(
data
->
driver
->
domains
,
uuid
)))
{
VIR_DEBUG
(
"No domain object to kill"
);
return
;
}
VIR_DEBUG
(
"driver=%p dom=%s conn=%p"
,
driver
,
dom
->
def
->
name
,
conn
);
priv
=
dom
->
privateData
;
VIR_DEBUG
(
"Killing domain"
);
virLXCProcessStop
(
d
ata
->
d
river
,
dom
,
VIR_DOMAIN_SHUTOFF_DESTROYED
);
virLXCProcessStop
(
driver
,
dom
,
VIR_DOMAIN_SHUTOFF_DESTROYED
);
virDomainAuditStop
(
dom
,
"destroyed"
);
event
=
virDomainEventNewFromObj
(
dom
,
VIR_DOMAIN_EVENT_STOPPED
,
VIR_DOMAIN_EVENT_STOPPED_DESTROYED
);
priv
->
doneStopEvent
=
true
;
if
(
dom
&&
!
dom
->
persistent
)
virDomainObjListRemove
(
data
->
driver
->
domains
,
dom
);
if
(
dom
&&
!
dom
->
persistent
)
{
virDomainObjListRemove
(
driver
->
domains
,
dom
);
dom
=
NULL
;
}
if
(
dom
)
virObjectUnlock
(
dom
);
if
(
event
)
virDomainEventStateQueue
(
data
->
driver
->
domainEventState
,
event
);
virHashRemoveEntry
(
data
->
driver
->
autodestroy
,
uuidstr
);
virDomainEventStateQueue
(
driver
->
domainEventState
,
event
);
return
dom
;
}
/*
* Precondition: driver is locked
*/
void
virLXCProcessAutoDestroyRun
(
virLXCDriverPtr
driver
,
virConnectPtr
conn
)
{
struct
virLXCProcessAutoDestroyData
data
=
{
driver
,
conn
};
VIR_DEBUG
(
"conn=%p"
,
conn
);
virHashForEach
(
driver
->
autodestroy
,
virLXCProcessAutoDestroyDom
,
&
data
);
}
void
virLXCProcessAutoDestroyShutdown
(
virLXCDriverPtr
driver
)
{
virHashFree
(
driver
->
autodestroy
);
}
int
virLXCProcessAutoDestroyAdd
(
virLXCDriverPtr
driver
,
virDomainObjPtr
vm
,
virConnectPtr
conn
)
{
char
uuidstr
[
VIR_UUID_STRING_BUFLEN
];
virUUIDFormat
(
vm
->
def
->
uuid
,
uuidstr
);
VIR_DEBUG
(
"vm=%s uuid=%s conn=%p"
,
vm
->
def
->
name
,
uuidstr
,
conn
);
if
(
virHashAddEntry
(
driver
->
autodestroy
,
uuidstr
,
conn
)
<
0
)
return
-
1
;
return
0
;
}
int
virLXCProcessAutoDestroyRemove
(
virLXCDriverPtr
driver
,
virDomainObjPtr
vm
)
{
char
uuidstr
[
VIR_UUID_STRING_BUFLEN
];
virUUIDFormat
(
vm
->
def
->
uuid
,
uuidstr
);
VIR_DEBUG
(
"vm=%s uuid=%s"
,
vm
->
def
->
name
,
uuidstr
);
if
(
virHashRemoveEntry
(
driver
->
autodestroy
,
uuidstr
)
<
0
)
return
-
1
;
return
0
;
}
static
virConnectPtr
virLXCProcessAutoDestroyGetConn
(
virLXCDriverPtr
driver
,
virDomainObjPtr
vm
)
{
char
uuidstr
[
VIR_UUID_STRING_BUFLEN
];
virUUIDFormat
(
vm
->
def
->
uuid
,
uuidstr
);
VIR_DEBUG
(
"vm=%s uuid=%s"
,
vm
->
def
->
name
,
uuidstr
);
return
virHashLookup
(
driver
->
autodestroy
,
uuidstr
);
}
static
int
virLXCProcessReboot
(
virLXCDriverPtr
driver
,
virDomainObjPtr
vm
)
{
virConnectPtr
conn
=
vir
LXCProcessAutoDestroyGetConn
(
driver
,
vm
);
virConnectPtr
conn
=
vir
CloseCallbacksGetConn
(
driver
->
closeCallbacks
,
vm
);
int
reason
=
vm
->
state
.
reason
;
bool
autodestroy
=
false
;
int
ret
=
-
1
;
...
...
@@ -243,7 +166,8 @@ static void virLXCProcessCleanup(virLXCDriverPtr driver,
}
/* Stop autodestroy in case guest is restarted */
virLXCProcessAutoDestroyRemove
(
driver
,
vm
);
virCloseCallbacksUnset
(
driver
->
closeCallbacks
,
vm
,
lxcProcessAutoDestroy
);
if
(
priv
->
monitor
)
{
virLXCMonitorClose
(
priv
->
monitor
);
...
...
@@ -1299,7 +1223,8 @@ int virLXCProcessStart(virConnectPtr conn,
}
if
(
autoDestroy
&&
virLXCProcessAutoDestroyAdd
(
driver
,
vm
,
conn
)
<
0
)
virCloseCallbacksSet
(
driver
->
closeCallbacks
,
vm
,
conn
,
lxcProcessAutoDestroy
)
<
0
)
goto
error
;
if
(
virDomainObjSetDefTransient
(
driver
->
caps
,
driver
->
xmlopt
,
...
...
src/lxc/lxc_process.h
浏览文件 @
c8695053
...
...
@@ -34,7 +34,6 @@ int virLXCProcessStop(virLXCDriverPtr driver,
virDomainObjPtr
vm
,
virDomainShutoffReason
reason
);
int
virLXCProcessAutoDestroyInit
(
virLXCDriverPtr
driver
);
void
virLXCProcessAutoDestroyRun
(
virLXCDriverPtr
driver
,
virConnectPtr
conn
);
void
virLXCProcessAutoDestroyShutdown
(
virLXCDriverPtr
driver
);
...
...
src/util/virclosecallbacks.c
浏览文件 @
c8695053
...
...
@@ -208,6 +208,30 @@ virCloseCallbacksGet(virCloseCallbacksPtr closeCallbacks,
return
cb
;
}
virConnectPtr
virCloseCallbacksGetConn
(
virCloseCallbacksPtr
closeCallbacks
,
virDomainObjPtr
vm
)
{
char
uuidstr
[
VIR_UUID_STRING_BUFLEN
];
virDriverCloseDefPtr
closeDef
;
virConnectPtr
conn
=
NULL
;
virUUIDFormat
(
vm
->
def
->
uuid
,
uuidstr
);
VIR_DEBUG
(
"vm=%s, uuid=%s"
,
vm
->
def
->
name
,
uuidstr
);
virObjectLock
(
closeCallbacks
);
closeDef
=
virHashLookup
(
closeCallbacks
->
list
,
uuidstr
);
if
(
closeDef
)
conn
=
closeDef
->
conn
;
virObjectUnlock
(
closeCallbacks
);
VIR_DEBUG
(
"conn=%p"
,
conn
);
return
conn
;
}
typedef
struct
_virCloseCallbacksListEntry
virCloseCallbacksListEntry
;
typedef
virCloseCallbacksListEntry
*
virCloseCallbacksListEntryPtr
;
struct
_virCloseCallbacksListEntry
{
...
...
src/util/virclosecallbacks.h
浏览文件 @
c8695053
...
...
@@ -45,6 +45,9 @@ virCloseCallback
virCloseCallbacksGet
(
virCloseCallbacksPtr
closeCallbacks
,
virDomainObjPtr
vm
,
virConnectPtr
conn
);
virConnectPtr
virCloseCallbacksGetConn
(
virCloseCallbacksPtr
closeCallbacks
,
virDomainObjPtr
vm
);
void
virCloseCallbacksRun
(
virCloseCallbacksPtr
closeCallbacks
,
virConnectPtr
conn
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录