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().
This commit is contained in:
Roman Bogorodskiy 2014-03-10 14:51:32 +04:00
parent fb235130fe
commit 356bf55e98

View File

@ -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: