}
else
{
- if (!bPinnedDone && heap.has_poh)
- {
- bPinnedDone = TRUE;
- dwAddrSeg = (DWORD_PTR)heap.generation_table[GetMaxGeneration() + 2].start_segment;
- dwAddr = dwAddrSeg;
-
- if (segment.Request(g_sos, dwAddr, heap.original_heap_details) != S_OK)
- {
- ExtOut("Error requesting heap segment %p\n", SOS_PTR(dwAddr));
- return FALSE;
- }
-
- dwAddrCurrObj = (DWORD_PTR)segment.mem;
- }
- else
- {
- break; // Done Verifying Heap
- }
+ break; // Done Verifying Heap
}
}
dwAddrCurrObj += s;
}
- // Now for the large object generation:
+ // Now for the large object and pinned object generations:
dwAddrSeg = (DWORD_PTR)heap.generation_table[GetMaxGeneration()+1].start_segment;
dwAddr = dwAddrSeg;
}
return FALSE;
}
+
dwAddrSeg = (DWORD_PTR)segment.next;
if (dwAddrSeg)
{
dwAddrCurrObj = (DWORD_PTR)segment.mem;
continue;
}
+ else if (heap.has_poh && !bPinnedDone)
+ {
+ bPinnedDone = TRUE;
+ dwAddrSeg = (DWORD_PTR)heap.generation_table[GetMaxGeneration() + 2].start_segment;
+ dwAddr = dwAddrSeg;
+
+ if (segment.Request(g_sos, dwAddr, heap.original_heap_details) != S_OK)
+ {
+ ExtOut("Error requesting heap segment %p\n", SOS_PTR(dwAddr));
+ return FALSE;
+ }
+
+ dwAddrCurrObj = (DWORD_PTR)segment.mem;
+ }
else
+ {
break; // Done Verifying Heap
+ }
}
if (FAILED(GetMTOfObject(dwAddrCurrObj, &dwAddrMethTable)))