mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-10-30 09:53:10 +00:00
Introduce virNetlinkEventServiceStopAll() to stop all netlink services.
This patch introduce virNetlinkEventServiceStopAll() to stop all the monitors to receive netlink messages for libvirtd. Signed-off-by: Tang Chen <tangchen@cn.fujitsu.com>
This commit is contained in:
parent
d575679401
commit
15a71e6059
@ -1327,7 +1327,7 @@ int main(int argc, char **argv) {
|
||||
0, "shutdown", NULL, NULL);
|
||||
|
||||
cleanup:
|
||||
virNetlinkEventServiceStop(NETLINK_ROUTE);
|
||||
virNetlinkEventServiceStopAll();
|
||||
virObjectUnref(remoteProgram);
|
||||
virObjectUnref(qemuProgram);
|
||||
virNetServerClose(srv);
|
||||
|
@ -1483,6 +1483,7 @@ virNetlinkEventRemoveClient;
|
||||
virNetlinkEventServiceIsRunning;
|
||||
virNetlinkEventServiceLocalPid;
|
||||
virNetlinkEventServiceStop;
|
||||
virNetlinkEventServiceStopAll;
|
||||
virNetlinkEventServiceStart;
|
||||
virNetlinkShutdown;
|
||||
virNetlinkStartup;
|
||||
|
@ -404,6 +404,46 @@ virNetlinkEventServiceStop(unsigned int protocol)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* virNetlinkEventServiceStopAll:
|
||||
*
|
||||
* Stop all the monitors to receive netlink messages for libvirtd.
|
||||
*
|
||||
* Returns -1 if any monitor cannot be unregistered, 0 upon success
|
||||
*/
|
||||
int
|
||||
virNetlinkEventServiceStopAll(void)
|
||||
{
|
||||
unsigned int i, j;
|
||||
virNetlinkEventSrvPrivatePtr srv = NULL;
|
||||
|
||||
VIR_INFO("stopping all netlink event services");
|
||||
|
||||
for (i = 0; i < MAX_LINKS; i++) {
|
||||
srv = server[i];
|
||||
if (!srv)
|
||||
continue;
|
||||
|
||||
virNetlinkEventServerLock(srv);
|
||||
nl_close(srv->netlinknh);
|
||||
virNetlinkFree(srv->netlinknh);
|
||||
virEventRemoveHandle(srv->eventwatch);
|
||||
|
||||
for (j = 0; j < srv->handlesCount; j++) {
|
||||
if (srv->handles[j].deleted == VIR_NETLINK_HANDLE_VALID)
|
||||
virNetlinkEventRemoveClientPrimitive(j, i);
|
||||
}
|
||||
|
||||
server[i] = NULL;
|
||||
virNetlinkEventServerUnlock(srv);
|
||||
|
||||
virMutexDestroy(&srv->lock);
|
||||
VIR_FREE(srv);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* virNetlinkEventServiceIsRunning:
|
||||
*
|
||||
@ -731,6 +771,16 @@ int virNetlinkEventServiceStop(unsigned int protocol ATTRIBUTE_UNUSED)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* stopNetlinkEventServerAll: stop all the monitors to receive netlink
|
||||
* messages for libvirtd
|
||||
*/
|
||||
int virNetlinkEventServiceStopAll(void)
|
||||
{
|
||||
VIR_DEBUG("%s", _(unsupported));
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* startNetlinkEventServer: start a monitor to receive netlink
|
||||
* messages for libvirtd
|
||||
|
@ -53,6 +53,11 @@ typedef void (*virNetlinkEventRemoveCallback)(int watch, const virMacAddrPtr mac
|
||||
*/
|
||||
int virNetlinkEventServiceStop(unsigned int protocol);
|
||||
|
||||
/**
|
||||
* stopNetlinkEventServerAll: stop all the monitors to receive netlink messages for libvirtd
|
||||
*/
|
||||
int virNetlinkEventServiceStopAll(void);
|
||||
|
||||
/**
|
||||
* startNetlinkEventServer: start a monitor to receive netlink messages for libvirtd
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user