35 lines
899 B
Diff
35 lines
899 B
Diff
+++ src/app/virtualbox/src/VBox/Devices/VMMDev/VMMDevHGCM.cpp
|
|
@@ -39,6 +39,12 @@
|
|
# define VBOXDD_HGCMCALL_COMPLETED_DONE(a,b,c,d) do { } while (0)
|
|
#endif
|
|
|
|
+#include <base/lock.h>
|
|
+
|
|
+
|
|
+static Genode::Lock w4c(Genode::Lock::LOCKED);
|
|
+
|
|
+
|
|
typedef enum _VBOXHGCMCMDTYPE
|
|
{
|
|
VBOXHGCMCMDTYPE_LOADSTATE = 0,
|
|
@@ -1147,6 +1153,9 @@ int vmmdevHGCMCall (VMMDevState *pVMMDevState, VMMDevHGCMCall *pHGCMCall, uint32
|
|
RTMemFree (pCmd);
|
|
}
|
|
|
|
+ /* wait for completion */
|
|
+ w4c.lock();
|
|
+
|
|
return rc;
|
|
}
|
|
|
|
@@ -2382,6 +2391,9 @@ DECLCALLBACK(void) hgcmCompleted (PPDMIHGCMPORT pInterface, int32_t result, PVBO
|
|
int rc = VMR3ReqCallVoidNoWait(PDMDevHlpGetVM(pVMMDevState->pDevIns), VMCPUID_ANY,
|
|
(PFNRT)hgcmCompletedWorker, 3, pInterface, result, pCmd);
|
|
AssertRC(rc);
|
|
+
|
|
+ /* signal completion */
|
|
+ w4c.unlock();
|
|
}
|
|
|
|
/* @thread EMT */
|