
23-Nov-16 11:00, Nikolay Shirokovskiy пишет:
On 23.11.2016 10:50, Michal Privoznik wrote:
On 23.11.2016 08:08, Nikolay Shirokovskiy wrote:
On 22.11.2016 17:49, Michal Privoznik wrote:
On 14.11.2016 15:24, Nikolay Shirokovskiy wrote:
qemuDomainObjExitAgent is unsafe.
First it accesses domain object without domain lock. Second it uses outdated logic that goes back to commit 79533da1 of year 2009 when code was quite different. (unref function instead of unreferencing only unlocked and disposed object in case of last reference and leaved unlocking to the caller otherwise). Nowadays this logic may lead to disposing locked object i guess. Well, I agree that the order of those two steps should be reversed, so ACK to that.
Another problem is that the callers of qemuDomainObjEnterAgent use domain object again (namely priv->agent) without domain lock. But why is this a problem? qemuProcessHandleAgentEOF for example can zero out priv->agent after we call qemuDomainObjEnterAgent and before we call qemuAgentGetTime(priv->agent, seconds, nseconds). Because we drop domain lock in qemuDomainObjEnterAgent and qemuProcessHandleAgentEOF does not acquire job condition, only domain lock. At the same time qemuAgentGetTime is not ready for NULL agent and will crash. It could get even worse as priv->agent is not atomic and instead of NULL we can get garbage there. Long story short we just should not access domain state without lock. Thats why I change all the places so we get copy of priv->agent before we drop domain lock.
Ah. Sounds reasonable. Mind adding it to the commit message? Of course not.
ACK then.
Thanx! I have no push rights so can you push this and another agent series you ACKed recently instead of me? (Sorry this will take changing commit message too:).
I went ahead and pushed this and another series you mentioned. Maxim