On Fri, 2015-07-10 at 13:51 +0200, Cédric Bosdonnat wrote: > The virLXCControllerAppendNBDPids function didn't properly initialize > pids and npids. In case of failure it was crashing when freeing those. > > The nbd device pid file doesn't appear immediately after starting > qemu-nbd: adding a small loop to wait for it. > > Diff to v1: > * Fixed a typo in a variable name.... working with several repos leads > to troubles ;) > --- > src/lxc/lxc_controller.c | 19 +++++++++++++++++-- > 1 file changed, 17 insertions(+), 2 deletions(-) > > diff --git a/src/lxc/lxc_controller.c b/src/lxc/lxc_controller.c > index 828b8a8..78d3eee 100644 > --- a/src/lxc/lxc_controller.c > +++ b/src/lxc/lxc_controller.c > @@ -533,16 +533,31 @@ static int virLXCControllerAppendNBDPids(virLXCControllerPtr ctrl, > const char *dev) > { > char *pidpath = NULL; > - pid_t *pids; > - size_t npids; > + pid_t *pids = NULL; > + size_t npids = 0; > size_t i; > int ret = -1; > + size_t loops = 0; > pid_t pid; > > if (!STRPREFIX(dev, "/dev/") || > virAsprintf(&pidpath, "/sys/devices/virtual/block/%s/pid", dev + 5) < 0) > goto cleanup; > > + /* Wait for the pid file to appear */ > + while (!virFileExists(pidpath)) { > + /* wait for 100ms before checking again, but don't do it for ever */ > + if (errno == ENOENT && loop < 10) { Oops, again it looks like I send-emailed too quickly and forgot to commit --amend. Obviously loop should be loops here > + usleep(100 * 1000); > + loop++; And here too. > + } else { > + virReportSystemError(errno, > + _("Cannot check NBD device %s pid"), > + dev + 5); > + goto cleanup; > + } > + } > + > if (virPidFileReadPath(pidpath, &pid) < 0) > goto cleanup; > -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list