*/}}
Browse Source

Single instance memtake

YimingWu 3 days ago
parent
commit
2a93e89c2d
1 changed files with 3 additions and 2 deletions
  1. 3 2
      la_data.c

+ 3 - 2
la_data.c

@@ -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);