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/DistortedOutputSurface.java
1041 1041
  public void doWork()
1042 1042
    {
1043 1043
    int num = mJobs.size();
1044
    Job job;
1045 1044

  
1046
    for(int i=0; i<num; i++)
1045
    if( num>0 )
1047 1046
      {
1048
      job = mJobs.remove(0);
1047
      Job job;
1049 1048

  
1050
      switch(job.type)
1049
      for(int i=0; i<num; i++)
1051 1050
        {
1052
        case ATTACH: if( mChildren==null ) mChildren = new ArrayList<>(2);
1053
                     job.node.setSurfaceParent(this);
1054
                     DistortedMaster.addSortingByBuckets(mChildren,job.node);
1055
                     mNumChildren++;
1056
                     break;
1057
        case DETACH: if( mNumChildren>0 && mChildren.remove(job.node) )
1058
                       {
1059
                       job.node.setSurfaceParent(null);
1060
                       mNumChildren--;
1061
                       }
1062
                     break;
1063
        case DETALL: if( mNumChildren>0 )
1064
                       {
1065
                       DistortedNode tmp;
1066

  
1067
                       for(int j=mNumChildren-1; j>=0; j--)
1051
        job = mJobs.remove(0);
1052

  
1053
        switch(job.type)
1054
          {
1055
          case ATTACH: if( mChildren==null ) mChildren = new ArrayList<>(2);
1056
                       job.node.setSurfaceParent(this);
1057
                       DistortedMaster.addSortingByBuckets(mChildren,job.node);
1058
                       mNumChildren++;
1059
                       break;
1060
          case DETACH: if( mNumChildren>0 && mChildren.remove(job.node) )
1068 1061
                         {
1069
                         tmp = mChildren.remove(j);
1070
                         tmp.setSurfaceParent(null);
1062
                         job.node.setSurfaceParent(null);
1063
                         mNumChildren--;
1071 1064
                         }
1065
                       break;
1066
          case DETALL: if( mNumChildren>0 )
1067
                         {
1068
                         DistortedNode tmp;
1069

  
1070
                         for(int j=mNumChildren-1; j>=0; j--)
1071
                           {
1072
                           tmp = mChildren.remove(j);
1073
                           tmp.setSurfaceParent(null);
1074
                           }
1072 1075

  
1073
                       mNumChildren = 0;
1074
                       }
1075
                     break;
1076
        case SORT  : mChildren.remove(job.node);
1077
                     DistortedMaster.addSortingByBuckets(mChildren,job.node);
1078
                     break;
1076
                         mNumChildren = 0;
1077
                         }
1078
                       break;
1079
          case SORT  : mChildren.remove(job.node);
1080
                       DistortedMaster.addSortingByBuckets(mChildren,job.node);
1081
                       break;
1082
          }
1079 1083
        }
1080 1084
      }
1081 1085
    }

Also available in: Unified diff