1
0
forked from pool/virtualbox
virtualbox/fix_7.0.6_locking_problems.patch

29 lines
1.2 KiB
Diff

Index: VirtualBox-7.0.12/src/VBox/HostDrivers/Support/SUPDrvGip.cpp
===================================================================
--- VirtualBox-7.0.12.orig/src/VBox/HostDrivers/Support/SUPDrvGip.cpp
+++ VirtualBox-7.0.12/src/VBox/HostDrivers/Support/SUPDrvGip.cpp
@@ -4537,9 +4537,11 @@ static int supdrvTscDeltaThreadWait(PSUP
*/
static void supdrvTscDeltaThreadStartMeasurement(PSUPDRVDEVEXT pDevExt, bool fForceAll)
{
+ if (!pDevExt || ! pDevExt->hTscDeltaSpinlock)
+ return;
+ RTSpinlockAcquire(pDevExt->hTscDeltaSpinlock);
if (pDevExt->hTscDeltaThread != NIL_RTTHREAD)
{
- RTSpinlockAcquire(pDevExt->hTscDeltaSpinlock);
if ( pDevExt->enmTscDeltaThreadState == kTscDeltaThreadState_Listening
|| pDevExt->enmTscDeltaThreadState == kTscDeltaThreadState_Measuring)
{
@@ -4550,9 +4552,9 @@ static void supdrvTscDeltaThreadStartMea
else if ( pDevExt->enmTscDeltaThreadState == kTscDeltaThreadState_WaitAndMeasure
&& fForceAll)
pDevExt->fTscThreadRecomputeAllDeltas = true;
- RTSpinlockRelease(pDevExt->hTscDeltaSpinlock);
RTThreadUserSignal(pDevExt->hTscDeltaThread);
}
+ RTSpinlockRelease(pDevExt->hTscDeltaSpinlock);
}