GCAlloc, GCLargeAlloc, and the reaper all differ about how to delete objects

NEW
Unassigned

Status

Tamarin
Garbage Collection (mmGC)
7 years ago
6 years ago

People

(Reporter: Lars T Hansen, Unassigned)

Tracking

unspecified
Future
Bug Flags:
flashplayer-qrb +

Details

(Reporter)

Description

7 years ago
In GCAlloc, we test whether the first word is zero (this came in with bug #573737 and may actually be redundant now, I'm investigating), then we clear kFinalizable, then we run the destructor.  The clearing of the bit before the destructor call is supposed to make the GC more resilient; if the destructor throws, then the clearing is important (according to a comment).  IMO, if the destructor throws while we're in a GC critical section then we're already long past gone, but perhaps this has some relevance to OOM handling?

In GCLargeAlloc, we just run the finalizer: no zero check, no bit clearing.  Then the object is freed.

In the reaper, we assert that the first word is not zero, then we run the destructor without clearing the bit.  Then the object is freed.
(Reporter)

Updated

6 years ago
Assignee: lhansen → nobody
Status: ASSIGNED → NEW

Updated

6 years ago
Flags: flashplayer-qrb+
Target Milestone: --- → Future
You need to log in before you can comment on or make changes to this bug.