From 47bcd9d1891b77fe425ab993dca3e86eeba56491 Mon Sep 17 00:00:00 2001 From: "dbaron%fas.harvard.edu" Date: Wed, 14 Aug 2002 12:49:24 +0000 Subject: [PATCH] Mark freed memory in stack arena with 0xdd. b=161283 sr=bzbarsky r=kin git-svn-id: svn://10.0.0.236/trunk@127256 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/layout/base/nsPresShell.cpp | 20 +++++++++++++++----- mozilla/layout/html/base/src/nsPresShell.cpp | 20 +++++++++++++++----- 2 files changed, 30 insertions(+), 10 deletions(-) diff --git a/mozilla/layout/base/nsPresShell.cpp b/mozilla/layout/base/nsPresShell.cpp index 88f0bc1831e..2cd5c290b81 100644 --- a/mozilla/layout/base/nsPresShell.cpp +++ b/mozilla/layout/base/nsPresShell.cpp @@ -549,6 +549,20 @@ StackArena::Pop() // pop off the mark NS_ASSERTION(mStackTop > 0, "Error Pop called 1 too many times"); mStackTop--; + +#ifdef DEBUG + // Mark the "freed" memory with 0xdd to help with debugging of memory + // allocation problems. + { + StackBlock *block = mMarks[mStackTop].mBlock, *block_end = mCurBlock; + size_t pos = mMarks[mStackTop].mPos; + for (; block != block_end; block = block->mNext, pos = 0) { + memset(block->mBlock + pos, 0xdd, sizeof(block->mBlock) - pos); + } + memset(block->mBlock + pos, 0xdd, mPos - pos); + } +#endif + mCurBlock = mMarks[mStackTop].mBlock; mPos = mMarks[mStackTop].mPos; @@ -1870,11 +1884,7 @@ PresShell::PushStackMemory() NS_IMETHODIMP PresShell::PopStackMemory() { - if (!mStackArena) { - mStackArena = new StackArena(); - if (!mStackArena) - return NS_ERROR_OUT_OF_MEMORY; - } + NS_ENSURE_TRUE(mStackArena, NS_ERROR_UNEXPECTED); return mStackArena->Pop(); } diff --git a/mozilla/layout/html/base/src/nsPresShell.cpp b/mozilla/layout/html/base/src/nsPresShell.cpp index 88f0bc1831e..2cd5c290b81 100644 --- a/mozilla/layout/html/base/src/nsPresShell.cpp +++ b/mozilla/layout/html/base/src/nsPresShell.cpp @@ -549,6 +549,20 @@ StackArena::Pop() // pop off the mark NS_ASSERTION(mStackTop > 0, "Error Pop called 1 too many times"); mStackTop--; + +#ifdef DEBUG + // Mark the "freed" memory with 0xdd to help with debugging of memory + // allocation problems. + { + StackBlock *block = mMarks[mStackTop].mBlock, *block_end = mCurBlock; + size_t pos = mMarks[mStackTop].mPos; + for (; block != block_end; block = block->mNext, pos = 0) { + memset(block->mBlock + pos, 0xdd, sizeof(block->mBlock) - pos); + } + memset(block->mBlock + pos, 0xdd, mPos - pos); + } +#endif + mCurBlock = mMarks[mStackTop].mBlock; mPos = mMarks[mStackTop].mPos; @@ -1870,11 +1884,7 @@ PresShell::PushStackMemory() NS_IMETHODIMP PresShell::PopStackMemory() { - if (!mStackArena) { - mStackArena = new StackArena(); - if (!mStackArena) - return NS_ERROR_OUT_OF_MEMORY; - } + NS_ENSURE_TRUE(mStackArena, NS_ERROR_UNEXPECTED); return mStackArena->Pop(); }