Closed
Bug 334514
(framedest)
Opened 19 years ago
Closed 18 years ago
FrameArena::~FrameArena should assert that it's empty
Categories
(Core :: Layout, enhancement)
Core
Layout
Tracking
()
RESOLVED
FIXED
People
(Reporter: jruderman, Assigned: jruderman)
References
()
Details
(Keywords: fixed1.8.1.15, Whiteboard: [sg:want P3])
Attachments
(2 files, 3 obsolete files)
(deleted),
patch
|
roc
:
review+
roc
:
superreview+
|
Details | Diff | Splinter Review |
(deleted),
patch
|
dveditz
:
approval1.8.1.15+
|
Details | Diff | Splinter Review |
I think FrameArena::~FrameArena should assert that it's empty (that all frames have been freed with FreeFrame). That would make it easier to catch some leaks (e.g. leaking an image frame causes the entire image to leak) and security holes.
How hard would this be? I don't know how easy it is to check whether an arena is all unused, but I guess in the worst case AllocateFrame and FreeFrame could just keep counters.
Assignee | ||
Updated•19 years ago
|
Whiteboard: [sg:want P3]
Assignee | ||
Comment 1•19 years ago
|
||
Can this check be done cheaply enough for non-developer builds? Maybe we should make it so if any frames are dropped, FrameArena::~FrameArena doesn't clean up its memory and instead leaks it. Better to leak more memory than to crash later dereferencing a dangling frame pointer, right?
Assignee | ||
Updated•18 years ago
|
Assignee | ||
Comment 2•18 years ago
|
||
This sounds like a great idea to me (both parts).
Assignee | ||
Comment 4•18 years ago
|
||
I tried making the whole thing leak when some frames have not been destroyed, but that didn't fix the scary crash; it only changed where it crashed. I discussed this with roc, and I guess we just have to be vigilant and fix these bugs.
Some possibilities for the assertion text:
* "Some frames leaked."
* "Some frames were not destroyed."
* "Some frame destructors were not called."
* "Some frames were leaked until document destruction and never had their destructors called."
* "Some frames were leaked until document destruction. Images for those frames may have leaked permanently."
I'll attach a new patch in a few minutes.
Assignee | ||
Comment 5•18 years ago
|
||
http://lxr.mozilla.org/seamonkey/source/nsprpub/pr/include/prtypes.h#503 tells me I shouldn't use PRUword, but it's the only integer type I can find that's always big enough to count allocated objects...
Attachment #228938 -
Attachment is obsolete: true
Attachment #232626 -
Flags: superreview?(roc)
Attachment #232626 -
Flags: review?(dbaron)
Assignee | ||
Comment 6•18 years ago
|
||
Other possibilities:
* Use PRUint64 with LL_IS_ZERO, etc. That would be slow for 32-bit platforms, though.
* Use PRUint32 or long and don't worry about integer overflow, since this is just for an assertion in debug builds.
or
* Use PRUInt32 and check when you increment that it hasn't rolled over to zero
Assignee | ||
Comment 8•18 years ago
|
||
Not checking for overflow, since it's pretty unlikely that there would be exactly 2^32 frames live when the framearena goes away. Since this is just for an assertion in debug builds, false negatives are ok.
Assignee: nobody → jruderman
Attachment #232626 -
Attachment is obsolete: true
Status: NEW → ASSIGNED
Attachment #232875 -
Flags: superreview?(roc)
Attachment #232875 -
Flags: review?(dbaron)
Attachment #232626 -
Flags: superreview?(roc)
Attachment #232626 -
Flags: review?(dbaron)
Assignee | ||
Comment 9•18 years ago
|
||
Factored the code I'm adding out of the DEBUG_TRACEMALLOC_FRAMEARENA ifdef in AllocateFrame.
Attachment #232875 -
Attachment is obsolete: true
Attachment #232881 -
Flags: superreview?(roc)
Attachment #232881 -
Flags: review?(dbaron)
Attachment #232875 -
Flags: superreview?(roc)
Attachment #232875 -
Flags: review?(dbaron)
Assignee | ||
Comment 10•18 years ago
|
||
Ignore the change to the Contributors section of the file. One of my text editors must not have liked the charset. I don't intend to check that in.
Attachment #232881 -
Flags: superreview?(roc)
Attachment #232881 -
Flags: superreview+
Attachment #232881 -
Flags: review?(dbaron)
Attachment #232881 -
Flags: review+
Assignee | ||
Comment 11•18 years ago
|
||
Fixed on trunk.
Status: ASSIGNED → RESOLVED
Closed: 18 years ago
Resolution: --- → FIXED
Assignee | ||
Updated•18 years ago
|
Alias: framedest
Assignee | ||
Comment 12•17 years ago
|
||
Attachment #311931 -
Flags: approval1.8.1.14?
Comment 13•17 years ago
|
||
Do the boatload of "Depends on" bugs represent regressions that need to be fixed also?
Comment 14•17 years ago
|
||
Comment on attachment 311931 [details] [diff] [review]
patch for 1.8 branch
approved for 1.8.1.15, a=dveditz
Assignee | ||
Comment 15•17 years ago
|
||
The dependencies are bugs that trigger the assertion. Many of them were found thanks to the assertion being in place.
I checked the patch in on the 1.8 branch.
Keywords: fixed1.8.1.15
Updated•17 years ago
|
Attachment #311931 -
Flags: approval1.8.1.15? → approval1.8.1.15+
Assignee | ||
Updated•16 years ago
|
Depends on: CVE-2008-5500
Assignee | ||
Updated•16 years ago
|
Depends on: CVE-2009-3981
You need to log in
before you can comment on or make changes to this bug.
Description
•