libvirt/src/lxc
Daniel P. Berrange 36c1fc189d Fix deadlock in handling EOF in LXC monitor
Depending on the scenario in which LXC containers exit, it is
possible for the EOF callback of the LXC monitor to deadlock
the driver.

  #0  0x00000038a0a0de4d in __lll_lock_wait () from /lib64/libpthread.so.0
  #1  0x00000038a0a09ca6 in _L_lock_840 () from /lib64/libpthread.so.0
  #2  0x00000038a0a09ba8 in pthread_mutex_lock () from /lib64/libpthread.so.0
  #3  0x00007f4bd9579d55 in virMutexLock (m=<optimized out>) at util/threads-pthread.c:85
  #4  0x00007f4bcacc7597 in lxcDriverLock (driver=0x7f4bc40c8290) at lxc/lxc_conf.h:81
  #5  virLXCProcessMonitorEOFNotify (mon=<optimized out>, vm=0x7f4bb4000b00) at lxc/lxc_process.c:581
  #6  0x00007f4bd9645c91 in virNetClientCloseLocked (client=client@entry=0x7f4bb4009e60)
      at rpc/virnetclient.c:554
  #7  0x00007f4bd96460f8 in virNetClientIOEventLoopPassTheBuck (thiscall=0x0, client=0x7f4bb4009e60)
      at rpc/virnetclient.c:1306
  #8  virNetClientIOEventLoopPassTheBuck (client=0x7f4bb4009e60, thiscall=0x0)
      at rpc/virnetclient.c:1287
  #9  0x00007f4bd96467a2 in virNetClientCloseInternal (reason=3, client=0x7f4bb4009e60)
      at rpc/virnetclient.c:589
  #10 virNetClientCloseInternal (client=0x7f4bb4009e60, reason=3) at rpc/virnetclient.c:561
  #11 0x00007f4bcacc4a82 in virLXCMonitorClose (mon=0x7f4bb4000a00) at lxc/lxc_monitor.c:201
  #12 0x00007f4bcacc55ac in virLXCProcessCleanup (reason=<optimized out>, vm=0x7f4bb4000b00,
      driver=0x7f4bc40c8290) at lxc/lxc_process.c:240
  #13 virLXCProcessStop (driver=0x7f4bc40c8290, vm=vm@entry=0x7f4bb4000b00,
      reason=reason@entry=VIR_DOMAIN_SHUTOFF_DESTROYED) at lxc/lxc_process.c:735
  #14 0x00007f4bcacc5bd2 in virLXCProcessAutoDestroyDom (payload=<optimized out>,
      name=0x7f4bb4003c80, opaque=0x7fff41af2df0) at lxc/lxc_process.c:94
  #15 0x00007f4bd9586649 in virHashForEach (table=0x7f4bc409b270,
      iter=iter@entry=0x7f4bcacc5ab0 <virLXCProcessAutoDestroyDom>, data=data@entry=0x7fff41af2df0)
      at util/virhash.c:514
  #16 0x00007f4bcacc52d7 in virLXCProcessAutoDestroyRun (driver=driver@entry=0x7f4bc40c8290,
      conn=conn@entry=0x7f4bb8000ab0) at lxc/lxc_process.c:120
  #17 0x00007f4bcacca628 in lxcClose (conn=0x7f4bb8000ab0) at lxc/lxc_driver.c:128
  #18 0x00007f4bd95e67ab in virReleaseConnect (conn=conn@entry=0x7f4bb8000ab0) at datatypes.c:114

When the driver calls virLXCMonitorClose, there is really no
need for the EOF callback to be invoked in this case, since
the caller can easily handle events itself. In changing this,
the monitor needs to take a deep copy of the callback list,
not merely a reference.

Also adds debug statements in various places to aid
troubleshooting

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
2012-09-27 10:11:44 +01:00
..
libvirtd_lxc.aug Add support for sVirt in the LXC driver 2012-02-02 17:44:39 -07:00
lxc_cgroup.c maint: fix up copyright notice inconsistencies 2012-09-20 16:30:55 -06:00
lxc_cgroup.h maint: fix up copyright notice inconsistencies 2012-09-20 16:30:55 -06:00
lxc_conf.c maint: fix up copyright notice inconsistencies 2012-09-20 16:30:55 -06:00
lxc_conf.h maint: fix up copyright notice inconsistencies 2012-09-20 16:30:55 -06:00
lxc_container.c Move virProcess{Kill,Abort,TranslateStatus} into virprocess.{c,h} 2012-09-26 10:09:57 +01:00
lxc_container.h maint: fix up copyright notice inconsistencies 2012-09-20 16:30:55 -06:00
lxc_controller.c Move virProcess{Kill,Abort,TranslateStatus} into virprocess.{c,h} 2012-09-26 10:09:57 +01:00
lxc_domain.c maint: fix up copyright notice inconsistencies 2012-09-20 16:30:55 -06:00
lxc_domain.h maint: fix up copyright notice inconsistencies 2012-09-20 16:30:55 -06:00
lxc_driver.c maint: fix up copyright notice inconsistencies 2012-09-20 16:30:55 -06:00
lxc_driver.h maint: fix up copyright notice inconsistencies 2012-09-20 16:30:55 -06:00
lxc_monitor.c Fix deadlock in handling EOF in LXC monitor 2012-09-27 10:11:44 +01:00
lxc_monitor.h Convert virLXCMonitor to use virObject 2012-09-26 10:09:57 +01:00
lxc_process.c Fix deadlock in handling EOF in LXC monitor 2012-09-27 10:11:44 +01:00
lxc_process.h maint: fix up copyright notice inconsistencies 2012-09-20 16:30:55 -06:00
lxc_protocol.x Add handling for reboots of LXC containers 2012-07-30 13:09:56 +01:00
lxc.conf Standardize whitespace used in example config files 2012-05-28 10:59:13 +01:00
test_libvirtd_lxc.aug.in Autogenerate augeas test case from default config files 2012-05-28 11:07:12 +01:00