lolfix some deadlocks in UDFS:
- deadlock when enumerating files
- deadlock on shutdown after volume change

I could track it to the fact that for whatever reason, GCC wrongly optimize the
BOOLEAN used to store whether the VCB resource was acquired. The optimization being
to assume it's always FALSE. Thus, the resource is never released and the driver
ends in a deadlock.
To avoid this: marked the BOOLEAN variables as volatile.

I guess there are same kind deadlocks I couldn't see in my limited tests...

CORE-4375

svn path=/trunk/; revision=74897
This commit is contained in:
Pierre Schweitzer 2017-06-04 08:02:01 +00:00
parent 474be69727
commit 0978c888bd
2 changed files with 2 additions and 2 deletions

View file

@ -1109,7 +1109,7 @@ UDFQueueDelayedClose(
{
PtrUDFIrpContextLite IrpContextLite;
BOOLEAN StartWorker = FALSE;
BOOLEAN AcquiredVcb = FALSE;
volatile BOOLEAN AcquiredVcb = FALSE;
NTSTATUS RC;
AdPrint((" UDFQueueDelayedClose\n"));

View file

@ -205,7 +205,7 @@ UDFCommonCreate(
PACCESS_STATE AccessState;
PVCB Vcb = NULL;
BOOLEAN AcquiredVcb = FALSE;
volatile BOOLEAN AcquiredVcb = FALSE;
BOOLEAN OpenExisting = FALSE;
PERESOURCE Res1 = NULL;
PERESOURCE Res2 = NULL;