mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-22 05:35:25 +00:00
tests: fix double unlock of monitor in hotplug test
The qemuMonitorTestNew() function returns with the monitor object locked, and expects it to still be locked when qemuMonitorTestFree is called. The qemuhotplug test, however, explicitly unlocks the monitor, but then forgets to lock it again. As a result the qemuMonitorTestFree function is unlocking a mutex it doesn't own. This bug has existed forever, but since we use normal POSIX mutexes and don't check the return value of pthread_mutex_lock/unlock we didn't see the error. It was harmless until the switch to the per monitor event loop which requires the thread synchronization to work reliably, whereupon it started crashing. Reviewed-by: Peter Krempa <pkrempa@redhat.com> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
This commit is contained in:
parent
2695191a44
commit
46e16b553d
@ -337,6 +337,8 @@ testQemuHotplug(const void *data)
|
||||
ret = testQemuHotplugUpdate(vm, dev);
|
||||
}
|
||||
|
||||
virObjectLock(priv->mon);
|
||||
|
||||
cleanup:
|
||||
VIR_FREE(domain_filename);
|
||||
VIR_FREE(device_filename);
|
||||
@ -378,6 +380,7 @@ static void
|
||||
testQemuHotplugCpuDataFree(struct testQemuHotplugCpuData *data)
|
||||
{
|
||||
qemuDomainObjPrivatePtr priv;
|
||||
qemuMonitorPtr mon;
|
||||
|
||||
if (!data)
|
||||
return;
|
||||
@ -396,6 +399,8 @@ testQemuHotplugCpuDataFree(struct testQemuHotplugCpuData *data)
|
||||
virObjectUnref(data->vm);
|
||||
}
|
||||
|
||||
mon = qemuMonitorTestGetMonitor(data->mon);
|
||||
virObjectLock(mon);
|
||||
qemuMonitorTestFree(data->mon);
|
||||
VIR_FREE(data);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user