libvirt 到后面 driver。每个方法里都有很多相同的,比如 qemuDomObjFromDomain qemuDomainObjBeginJob qemuDomainObjEnterMonitor qemuDomainObjExitMonitor qemuDomainObjEndJob virDomainObjEndAPI。
这些都是后面对应方法必须写的,保证同一个vm只能有一个job在执行和只有一个qmp发出。
如果基础好,理解也是很快的。mutex锁,条件变量。这些。
vm = qemuDomObjFromDomain(domain)
qemuDomainObjBeginJob(driver, vm, QEMU_JOB_QUERY)
qemuDomainObjEnterMonitor
qemuDomainObjExitMonitor(driver, vm)
qemuDomainObjEndJob(driver, vm);
virDomainObjEndAPI(&vm);
主要分析图: