From: Roman Bogorodskiy Date: Mon, 10 Mar 2014 10:51:32 +0000 (+0400) Subject: Fix locking in virsh console X-Git-Tag: v1.2.3-rc1~330 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=356bf55e98b9e5d6abbd9a382abfe4e495f72314;p=thirdparty%2Flibvirt.git Fix locking in virsh console 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(). --- diff --git a/tools/virsh-console.c b/tools/virsh-console.c index 9c39ac42d2..c664a3a6cd 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: