|
@@ -4344,12 +4344,13 @@ int laIterateDB(laDBInst* parent, laPropPack* pp, laDiff* diff, laDBProp* dp);
|
|
|
int la_GenerateListDifferences(laDBInst* dbi, laDBSubProp* dbp, laPropPack* pp, laDiff* diff){
|
|
|
laProp *p = pp->LastPs->p, *subp = 0;
|
|
|
laPropIterator pi={0};
|
|
|
- void* inst; int any=0;
|
|
|
+ void* inst; int any=0,memtaken=0;
|
|
|
laListHandle New={0}, NewAdded={0}, NewDeleted={0}, NewMoved={0};
|
|
|
|
|
|
inst = laGetInstance(p, pp->LastPs->UseInstance, &pi);
|
|
|
pp->EndInstance = inst;
|
|
|
while (inst){
|
|
|
+ if(p->UDFIsSingle){ memTake(inst); memtaken=1; }
|
|
|
lstAppendPointer(&New, inst);
|
|
|
inst = laGetNextInstance(p, inst, &pi);
|
|
|
pp->EndInstance = inst;
|
|
@@ -4424,7 +4425,7 @@ int la_GenerateListDifferences(laDBInst* dbi, laDBSubProp* dbp, laPropPack* pp,
|
|
|
|
|
|
for(laDiffTemp* lip=NewDeleted.pFirst;lip;lip=lip->Item.pNext){printf("deleted %llx %llx\n", dbi, dbi->OriginalInstance);
|
|
|
laDBInst* dbi=lip->p; lstAppendItem(&dc->RemovedInst, la_NewDiffCommandInst(dbi, lip->tPrev, lip->tNext));
|
|
|
- memTake(dbi->OriginalInstance);
|
|
|
+ if(!memtaken) memTake(dbi->OriginalInstance);
|
|
|
//if(!dbi->Item.pPrev){dbp->Instances.pFirst=dbi->Item.pNext;}
|
|
|
//if(!dbi->Item.pNext){dbp->Instances.pLast=dbi->Item.pPrev;}
|
|
|
dbi->Item.pPrev=dbi->Item.pNext=0; //lstRemoveItem(&dbp->Instances, dbi);
|