fix crash loading corrupt history.dat file, cut down on mork memory growth when history does link coloring, r=naving, sr=alecf, sspitzer 113287 113354

This commit is contained in:
bienvenu%netscape.com 2001-12-04 21:04:56 +00:00
Родитель 252c1a941a
Коммит d90286769f
6 изменённых файлов: 12 добавлений и 16 удалений

Просмотреть файл

@ -853,7 +853,7 @@ morkBuilder::OnValue(morkEnv* ev, const morkSpan& inSpan,
yarn.mYarn_More = 0;
yarn.mYarn_Form = mBuilder_CellForm;
yarn.mYarn_Grow = 0;
morkAtom* atom = store->YarnToAtom(ev, &yarn);
morkAtom* atom = store->YarnToAtom(ev, &yarn, PR_TRUE /* create */);
cell->SetAtom(ev, atom, store->StorePool());
}
else if ( mParser_InMeta )

Просмотреть файл

@ -69,7 +69,7 @@
void
morkCell::SetYarn(morkEnv* ev, const mdbYarn* inYarn, morkStore* ioStore)
{
morkAtom* atom = ioStore->YarnToAtom(ev, inYarn);
morkAtom* atom = ioStore->YarnToAtom(ev, inYarn, PR_TRUE /* create */);
if ( atom )
this->SetAtom(ev, atom, ioStore->StorePool()); // refcounts atom
}

Просмотреть файл

@ -889,7 +889,7 @@ void morkRow::AddColumn(morkEnv* ev, mdb_column inColumn,
{
morkAtom* oldAtom = cell->mCell_Atom;
morkAtom* atom = ioStore->YarnToAtom(ev, inYarn);
morkAtom* atom = ioStore->YarnToAtom(ev, inYarn, PR_TRUE /* create */);
if ( atom && atom != oldAtom )
{
morkRowSpace* rowSpace = mRow_Space;

Просмотреть файл

@ -555,8 +555,10 @@ morkRow*
morkRowSpace::FindRow(morkEnv* ev, mork_column inCol, const mdbYarn* inYarn)
{
morkRow* outRow = 0;
morkAtom* atom = mSpace_Store->YarnToAtom(ev, inYarn);
// if yarn hasn't been atomized, there can't be a corresponding row,
// so pass in PR_FALSE to not create the row - should help history bloat
morkAtom* atom = mSpace_Store->YarnToAtom(ev, inYarn, PR_FALSE);
if ( atom ) // have or created an atom corresponding to input yarn?
{
mork_aid atomAid = atom->GetBookAtomAid();

Просмотреть файл

@ -272,13 +272,7 @@ morkStore::CloseStore(morkEnv* ev) // called by CloseMorkNode();
nsIMdbFile_SlotStrongFile((nsIMdbFile*) 0, ev,
&mStore_File);
refCnt = file->Release();
if ( refCnt > 0 )
{
nsCOMPtr <nsIMdbObject> object = do_QueryInterface(file);
if (object)
object->CloseMdbObject(ev->AsMdbEnv());
}
file->Release();
morkStream::SlotStrongStream((morkStream*) 0, ev, &mStore_InStream);
morkStream::SlotStrongStream((morkStream*) 0, ev, &mStore_OutStream);
@ -714,13 +708,13 @@ morkStore::CopyAtom(morkEnv* ev, const morkAtom* inAtom)
{
mdbYarn yarn;
if ( inAtom->AliasYarn(&yarn) )
outAtom = this->YarnToAtom(ev, &yarn);
outAtom = this->YarnToAtom(ev, &yarn, PR_TRUE /* create */);
}
return outAtom;
}
morkAtom*
morkStore::YarnToAtom(morkEnv* ev, const mdbYarn* inYarn)
morkStore::YarnToAtom(morkEnv* ev, const mdbYarn* inYarn, PRBool createIfMissing /* = PR_TRUE */)
{
morkAtom* outAtom = 0;
if ( ev->Good() )
@ -735,7 +729,7 @@ morkStore::YarnToAtom(morkEnv* ev, const mdbYarn* inYarn)
{
morkAtomBodyMap* map = &groundSpace->mAtomSpace_AtomBodies;
outAtom = map->GetAtom(ev, keyAtom);
if ( !outAtom )
if ( !outAtom && createIfMissing)
{
this->MaybeDirtyStore();
outAtom = groundSpace->MakeBookAtomCopy(ev, *keyAtom);

Просмотреть файл

@ -673,7 +673,7 @@ public: // typing
public: // store utilties
morkAtom* YarnToAtom(morkEnv* ev, const mdbYarn* inYarn);
morkAtom* YarnToAtom(morkEnv* ev, const mdbYarn* inYarn, PRBool createIfMissing = PR_TRUE);
morkAtom* AddAlias(morkEnv* ev, const morkMid& inMid,
mork_cscode inForm);