genode/repos/ports/src/virtualbox/hgcm_sync.patch

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 */