Project

General

Profile

« Previous | Next » 

Revision c43abe6c

Added by Leszek Koltunski about 5 years ago

Fixes for memory leak problems uncovered by the 'Rubik' app. (mainly: new method DistortedNode.markForDeletion)

View differences:

src/main/java/org/distorted/library/main/DistortedNode.java
101 101
    mMapNodeID.clear();
102 102
    }
103 103

  
104
///////////////////////////////////////////////////////////////////////////////////////////////////
105

  
106
  public void markForDeletion()
107
    {
108
    if( --mData.numPointingNodes==0 )
109
      {
110
      mMapNodeID.remove(mData.key);
111

  
112
      if( mData.mFBO!=null )
113
        {
114
        mData.mFBO.markForDeletion();
115
        mData.mFBO = null;
116
        }
117
      }
118

  
119
    mEffects.removeNode(this);
120
    }
121

  
104 122
///////////////////////////////////////////////////////////////////////////////////////////////////
105 123

  
106 124
  private ArrayList<Long> generateIDList()
......
656 674
  public void doWork()
657 675
    {
658 676
    int num = mJobs.size();
659
    Job job;
660

  
661
    int numChanges=0;
662 677

  
663
    for(int i=0; i<num; i++)
678
    if( num>0 )
664 679
      {
665
      job = mJobs.remove(0);
680
      Job job;
681
      int numChanges=0;
666 682

  
667
      switch(job.type)
683
      for(int i=0; i<num; i++)
668 684
        {
669
        case ATTACH: numChanges++;
670
                     if( mChildren==null ) mChildren = new ArrayList<>(2);
671
                     job.node.mParent = this;
672
                     job.node.mSurfaceParent = null;
673
                     DistortedMaster.addSortingByBuckets(mChildren,job.node);
674
                     mNumChildren[0]++;
675
                     break;
676
        case DETACH: numChanges++;
677
                     if( mNumChildren[0]>0 && mChildren.remove(job.node) )
678
                       {
679
                       job.node.mParent = null;
685
        job = mJobs.remove(0);
686

  
687
        switch(job.type)
688
          {
689
          case ATTACH: numChanges++;
690
                       if( mChildren==null ) mChildren = new ArrayList<>(2);
691
                       job.node.mParent = this;
680 692
                       job.node.mSurfaceParent = null;
681
                       mNumChildren[0]--;
682
                       }
683
                     break;
684
        case DETALL: numChanges++;
685
                     if( mNumChildren[0]>0 )
686
                       {
687
                       DistortedNode tmp;
688

  
689
                       for(int j=mNumChildren[0]-1; j>=0; j--)
693
                       DistortedMaster.addSortingByBuckets(mChildren,job.node);
694
                       mNumChildren[0]++;
695
                       break;
696
          case DETACH: numChanges++;
697
                       if( mNumChildren[0]>0 && mChildren.remove(job.node) )
690 698
                         {
691
                         tmp = mChildren.remove(j);
692
                         tmp.mParent = null;
693
                         tmp.mSurfaceParent = null;
699
                         job.node.mParent = null;
700
                         job.node.mSurfaceParent = null;
701
                         mNumChildren[0]--;
694 702
                         }
703
                       break;
704
          case DETALL: numChanges++;
705
                       if( mNumChildren[0]>0 )
706
                         {
707
                         DistortedNode tmp;
708

  
709
                         for(int j=mNumChildren[0]-1; j>=0; j--)
710
                           {
711
                           tmp = mChildren.remove(j);
712
                           tmp.mParent = null;
713
                           tmp.mSurfaceParent = null;
714
                           }
695 715

  
696
                       mNumChildren[0] = 0;
697
                       }
698
                     break;
699
        case SORT  : mChildren.remove(job.node);
700
                     DistortedMaster.addSortingByBuckets(mChildren,job.node);
701
                     break;
716
                         mNumChildren[0] = 0;
717
                         }
718
                       break;
719
          case SORT  : mChildren.remove(job.node);
720
                       DistortedMaster.addSortingByBuckets(mChildren,job.node);
721
                       break;
722
          }
702 723
        }
724
      if( numChanges>0 ) adjustIsomorphism();
703 725
      }
704

  
705
    if( numChanges>0 ) adjustIsomorphism();
706 726
    }
707 727

  
708 728
///////////////////////////////////////////////////////////////////////////////////////////////////

Also available in: Unified diff