bug 119631 nsSlidingString using a delete callback function r=dbaron@fas.harvard.edu, sr=jaggernaut, a=asa

git-svn-id: svn://10.0.0.236/trunk@115656 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
dp%netscape.com
2002-03-02 21:22:41 +00:00
parent 8f20158796
commit 7f327f1aa9
6 changed files with 76 additions and 8 deletions

View File

@@ -41,8 +41,14 @@ nsSlidingSharedBufferList::DiscardUnreferencedPrefix( Buffer* aRecentlyReleasedB
{
if ( aRecentlyReleasedBuffer == mFirstBuffer )
{
while ( mFirstBuffer && !mFirstBuffer->IsReferenced() )
delete UnlinkBuffer(mFirstBuffer);
while ( mFirstBuffer && !mFirstBuffer->IsReferenced() ) {
Buffer *buffer = UnlinkBuffer(mFirstBuffer);
if (mFreeProc && !buffer->IsSingleAllocationWithBuffer()) {
(*mFreeProc)(buffer->DataStart(), mClientData);
buffer->DataStart(nsnull);
}
delete buffer;
}
}
}
@@ -279,6 +285,13 @@ nsSlidingString::nsSlidingString( PRUnichar* aStorageStart, PRUnichar* aDataEnd,
// nothing else to do here
}
nsSlidingString::nsSlidingString( PRUnichar* aStorageStart, PRUnichar* aDataEnd, PRUnichar* aStorageEnd,
nsFreeProc *aFreeProc, void *aClientData )
: nsSlidingSubstring(new nsSlidingSharedBufferList(nsSlidingSharedBufferList::NewWrappingBuffer(aStorageStart, aDataEnd, aStorageEnd), aFreeProc, aClientData))
{
// nothing else to do here
}
void
nsSlidingString::AppendBuffer( PRUnichar* aStorageStart, PRUnichar* aDataEnd, PRUnichar* aStorageEnd )
{