﻿id	summary	reporter	owner	description	type	status	component	version	resolution	keywords	cc	guest	host
13802	Taking snapshot deadlock	a.urakov		"There is possible deadlock when taking snapshot of one machine. Deadlock occurs due to wrong XPCOM IPC service queue processing.

When calling ''IConsole::takeSnapshot()'' then ''IProgress'' object is returned and client calls ''IProgress::waitForCompletion()''. But there are many calls of ''Progress::SetNextOperation()'' and when one of these calls comes a bit later than ''IProgress::waitForCompletion()'' then described situation may occur.

Let's there is one worker thread of XPCOM IPC service. So when ''IProgress::waitForCompletion()'' request comes to ''ipcDConnectService::OnMessageAvailable()'' it appends it to request queue and yields the CPU. If worker's thread has not received a time slice then it will not get a request and next check will say that there is already one waiting worker and no need for one more. Second request of ''Progress::SetNextOperation()'' comes shortly after that and situation repeats. So we have two requests and one worker thread. If worker gets ''IProgress::waitForCompletion()'' request first then it indefinitely waits because this progress object can't complete (''Progress::SetNextOperation()'' can't be processed). So deadlock occurs.

In attached log you can find that request ''17537'' (''IProgress::waitForCompletion()'') is executed but ''17539'' (''Progress::SetNextOperation()'') is never executed.

Thank you in advance!
"	defect	closed	other	VirtualBox 4.3.20	fixed	snapshot, XPCOM, IPC, deadlock, IProgress		all	Linux
