vshRunConsole() uses virCondWait() which is a wrapper around pthread_cond_wait(). On FreeBSD, pthread_cond_wait needs mutex to be locked, otherwise it immediately fails with EPERM. On Linux, the behaviour in this case is undefined. So lock the mutex before calling virCondWait(). --- tools/virsh-console.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tools/virsh-console.c b/tools/virsh-console.c index 9c39ac4..c664a3a 100644 --- a/tools/virsh-console.c +++ b/tools/virsh-console.c @@ -356,6 +356,8 @@ vshRunConsole(vshControl *ctl, if (virCondInit(&con->cond) < 0 || virMutexInit(&con->lock) < 0) goto cleanup; + virMutexLock(&con->lock); + con->stdinWatch = virEventAddHandle(STDIN_FILENO, VIR_EVENT_HANDLE_READABLE, virConsoleEventOnStdin, @@ -375,11 +377,14 @@ vshRunConsole(vshControl *ctl, while (!con->quit) { if (virCondWait(&con->cond, &con->lock) < 0) { + virMutexUnlock(&con->lock); VIR_ERROR(_("unable to wait on console condition")); goto cleanup; } } + virMutexUnlock(&con->lock); + ret = 0; cleanup: -- 1.8.4.2 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list