diff --git a/db/mork/src/morkBuilder.cpp b/db/mork/src/morkBuilder.cpp index 8716fe8cafd..b72d197bfae 100644 --- a/db/mork/src/morkBuilder.cpp +++ b/db/mork/src/morkBuilder.cpp @@ -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 ) diff --git a/db/mork/src/morkCell.cpp b/db/mork/src/morkCell.cpp index 164bafe6aa9..fc9ebaa7293 100644 --- a/db/mork/src/morkCell.cpp +++ b/db/mork/src/morkCell.cpp @@ -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 } diff --git a/db/mork/src/morkRow.cpp b/db/mork/src/morkRow.cpp index aab9b790967..29539f4aaee 100644 --- a/db/mork/src/morkRow.cpp +++ b/db/mork/src/morkRow.cpp @@ -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; diff --git a/db/mork/src/morkRowSpace.cpp b/db/mork/src/morkRowSpace.cpp index 4b1b69828c4..8aed3cabf74 100644 --- a/db/mork/src/morkRowSpace.cpp +++ b/db/mork/src/morkRowSpace.cpp @@ -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(); diff --git a/db/mork/src/morkStore.cpp b/db/mork/src/morkStore.cpp index e1d8173d7f7..70211c2c4c4 100644 --- a/db/mork/src/morkStore.cpp +++ b/db/mork/src/morkStore.cpp @@ -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 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); diff --git a/db/mork/src/morkStore.h b/db/mork/src/morkStore.h index fe69dc7e422..da6a491d075 100644 --- a/db/mork/src/morkStore.h +++ b/db/mork/src/morkStore.h @@ -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);