From: Jeffrey Altman Date: Sat, 26 May 2012 22:06:07 +0000 (-0400) Subject: Windows: Remove extent from all skip lists X-Git-Tag: upstream/1.8.0_pre1^2~2355 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=ed0eb70f36121ca5cacbf0b87ab9d05bfbb526b8;p=packages%2Fo%2Fopenafs.git Windows: Remove extent from all skip lists Before freeing the memory for an Extent object, the extent must be removed from all of the extent skip lists. Otherwise, the lists will be corrupted. Change-Id: I891321477b9f0e194544e9e73dad53473f0865b4 Reviewed-on: http://gerrit.openafs.org/7518 Tested-by: BuildBot Reviewed-by: Jeffrey Altman Tested-by: Jeffrey Altman --- diff --git a/src/WINNT/afsrdr/kernel/lib/AFSExtentsSupport.cpp b/src/WINNT/afsrdr/kernel/lib/AFSExtentsSupport.cpp index 37252eb09..342f06607 100644 --- a/src/WINNT/afsrdr/kernel/lib/AFSExtentsSupport.cpp +++ b/src/WINNT/afsrdr/kernel/lib/AFSExtentsSupport.cpp @@ -253,7 +253,13 @@ AFSTearDownFcbExtents( IN AFSFcb *Fcb, InterlockedExchangeAdd( &Fcb->Specific.File.ExtentLength, -((LONG)(pEntry->Size/1024))); - RemoveEntryList( le); + for (ULONG i = 0; i < AFS_NUM_EXTENT_LISTS; i ++) + { + if (NULL != pEntry->Lists[i].Flink && !IsListEmpty(&pEntry->Lists[i])) + { + RemoveEntryList( &pEntry->Lists[i] ); + } + } AFSExFreePool( pEntry);