Closed Bug 523582 Opened 15 years ago Closed 6 years ago

Incorrect free list management in GCHeap

Categories

(Tamarin Graveyard :: Garbage Collection (mmGC), defect, P2)

x86
macOS
defect

Tracking

(Not tracked)

RESOLVED WONTFIX
Q1 12 - Brannan

People

(Reporter: lhansen, Unassigned)

References

Details

Instrumentation shows that the last free list (the one reserved for large blocks) ends up holding a number of smaller blocks.  During one run of ATS the distribution of sizes (in number of blocks) in the last free list was this:

  29: count=53 volume=37144K
     3 29 32 32 33 33 33 33 33 33 33 33 33 33 33 34 34 34 34 34 34 35 35 35 35 35 36 36 36 36 36 36 37 38 39 40 46 47 48 49 50 54 55 55 56 57 58 64 68 81 100 145 7045

Yet this list should be reserved for blocks of size at least 128.  This is not a critical leak because in practice most of the small blocks are coalesced with other free blocks and end up moving off this list in time, but it's a bug nonetheless.
I think you'll find those are decommitted blocks, this is by design, we want to consume committed free blocks before getting to decommitted ones, look for "back of the bus" in the code.
I'm looking at that code right now, and it doesn't make a whole lot of sense to me yet.  What/where is the logic that ensures that those blocks are moved off a list where they won't be found by an allocation request?
Alloc searches from a starting pointer determined by size to the request to the end of the freelist
That probably makes sense, but instrumentation shows that many of the free lists have some uncommitted blocks on them after a sufficiently long run.  So I question the consistency of the approach - based on what you write above, uncommitted blocks should end up in the last free list so that we bias against them, yet they do appear elsewhere.
Assignee: lhansen → nobody
Status: ASSIGNED → NEW
Priority: -- → P3
Target Milestone: --- → flash10.1
Priority: P3 → P4
Target Milestone: flash10.1 → flash10.2
Assignee: nobody → lhansen
What we have probably works - since coalescing of committed/uncommitted blocks during allocation does not pay attention to free list structure - but it requires a rethink.  If it's true that all decommitted blocks should be in the last free list then there's no need to be looking for decommitted blocks when searching the smaller free lists (and indeed uncommitted blocks may usefully be off on their own list entirely?)  However decommitted blocks definitely end up in the other free lists at this time, AllocBlock places them there when it splits a large uncommitted block into a smaller committed part and an uncommitted tail.
for the future I imagined the memory in the committed blocks themselves would be used to thread the freelists (because the HeapBlocks would be gone) and we can keep decommitted blocks separate.
Assignee: lhansen → nobody
Blocks: 564119
Priority: P4 → P2
Target Milestone: Q3 11 - Serrano → Q4 11 - Anza
Target Milestone: Q4 11 - Anza → Q1 12 - Brannan
I have a problem when I run .\platform\win32\obj_9\shell\Debug_Debugger\avm.exe hello.abc(windows)

flash.utils:IDataInputAssertion failed:"((!"a URI that is used in unversioned form must not later be used in versioned form"))" (“..\\..\\core\\AvmCore.cpp”:5376)
avmplus crash:exception 0x80000003 occurred

why?
(In reply to jewellery from comment #7)
> I have a problem when I run
> .\platform\win32\obj_9\shell\Debug_Debugger\avm.exe hello.abc(windows)
> 
> flash.utils:IDataInputAssertion failed:"((!"a URI that is used in
> unversioned form must not later be used in versioned form"))"
> (“..\\..\\core\\AvmCore.cpp”:5376)
> avmplus crash:exception 0x80000003 occurred
> 
> why?

I don't know.  But its probably unrelated to this Bugzilla ticket.

I would recommend posting a new bug report, including all of the following:

* The revision number of tamarin-redux you are building from
* The version number of asc.jar you used to build hello.abc
* The actual file for hello.abc
* If possible, the source for hello.as

If you need help with the process, you can contact me in the short term, or in the longer term, the tamarin-devel mailing list:
  https://mail.mozilla.org/listinfo/tamarin-devel
might be a good place to ask for assistance.
Status: NEW → RESOLVED
Closed: 6 years ago
Resolution: --- → WONTFIX
You need to log in before you can comment on or make changes to this bug.