зеркало из https://github.com/mozilla/pjs.git
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:
Родитель
252c1a941a
Коммит
d90286769f
|
@ -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);
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче