mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-22 05:35:25 +00:00
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:
parent
fb235130fe
commit
356bf55e98
@ -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:
|
||||
|
Loading…
Reference in New Issue
Block a user