1 diff -ur libvirt-0.9.9/src/lxc/lxc_controller.c libvirt-0.9.9-lxc/src/lxc/lxc_controller.c
2 --- libvirt-0.9.9/src/lxc/lxc_controller.c 2011-12-29 08:26:45.000000000 +0100
3 +++ libvirt-0.9.9-lxc/src/lxc/lxc_controller.c 2012-01-24 00:37:37.856545745 +0100
5 static bool quit = false;
8 +static pid_t initpid = -1;
10 +static void lxcSignalINTHandler(int signum ATTRIBUTE_UNUSED)
14 + kill(initpid, SIGINT);
17 static void lxcSignalChildHandler(int signum ATTRIBUTE_UNUSED)
19 @@ -1072,6 +1082,12 @@
23 + if (signal(SIGINT, lxcSignalINTHandler) == SIG_ERR) {
24 + virReportSystemError(errno, "%s",
25 + _("Cannot install signal handler"));
29 VIR_DEBUG("serverFd=%d clientFd=%d",
34 VIR_FORCE_CLOSE(control[1]);
35 VIR_FORCE_CLOSE(containerhandshake[1]);
36 + initpid = container;
38 if (lxcControllerMoveInterfaces(nveths, veths, container) < 0)
40 diff -ur libvirt-0.9.9/src/lxc/lxc_driver.c libvirt-0.9.9-lxc/src/lxc/lxc_driver.c
41 --- libvirt-0.9.9/src/lxc/lxc_driver.c 2011-12-29 08:26:45.000000000 +0100
42 +++ libvirt-0.9.9-lxc/src/lxc/lxc_driver.c 2012-01-24 13:58:05.548702741 +0100
43 @@ -3732,6 +3732,33 @@
47 +lxcDomainShutdown (virDomainPtr dom)
49 + lxc_driver_t *driver = dom->conn->privateData;
53 + lxcDriverLock(driver);
54 + vm = virDomainFindByUUID(&driver->domains, dom->uuid);
57 + lxcError(VIR_ERR_INTERNAL_ERROR,
58 + _("Invalid PID %d for container"), vm->pid);
62 + if (kill(vm->pid, SIGINT) < -1)
68 + virDomainObjUnlock(vm);
69 + lxcDriverUnlock(driver);
74 lxcDomainOpenConsole(virDomainPtr dom,
78 .domainLookupByName = lxcDomainLookupByName, /* 0.4.2 */
79 .domainSuspend = lxcDomainSuspend, /* 0.7.2 */
80 .domainResume = lxcDomainResume, /* 0.7.2 */
81 + .domainShutdown = lxcDomainShutdown,
82 .domainDestroy = lxcDomainDestroy, /* 0.4.4 */
83 .domainDestroyFlags = lxcDomainDestroyFlags, /* 0.9.4 */
84 .domainGetOSType = lxcGetOSType, /* 0.4.2 */