== Action Editor ==
authorJoshua Leung <aligorith@gmail.com>
Sat, 23 Jun 2007 07:12:09 +0000 (07:12 +0000)
committerJoshua Leung <aligorith@gmail.com>
Sat, 23 Jun 2007 07:12:09 +0000 (07:12 +0000)
Fixed a few little memory leaks introduced during my recode. They were only likely to occur in a few cases that don't happen very often.

source/blender/src/editaction.c

index d0b0005bf71af2d0157105faae77a8f42aa3b56e..1ddd64ef9eddd11a34eacaeea2aadf31f5ce5e6d 100644 (file)
@@ -767,7 +767,11 @@ static TransVert *transform_action_init (int *tvtot, float *minx, float *maxx)
                count += fullselect_ipo_keys(ale->key_data);
        
        /* stop if trying to build list if nothing selected */
-       if (count == 0) return NULL;
+       if (count == 0) {
+               /* cleanup temp list */
+               BLI_freelistN(&act_data);
+               return NULL;
+       }
                
        /* Build the transvert structure */
        tv = MEM_callocN (sizeof(TransVert) * count, "transVert");
@@ -1152,11 +1156,7 @@ void snap_action_keys(short mode)
        /* get data */
        data= get_action_context(&datatype);
        if (data == NULL) return;
-               
-       /* filter data */
-       filter= (ACTFILTER_VISIBLE | ACTFILTER_FOREDIT | ACTFILTER_IPOKEYS);
-       actdata_filter(&act_data, filter, data, datatype);
-
+       
        /* determine mode */
        switch (mode) {
                case 1:
@@ -1172,6 +1172,10 @@ void snap_action_keys(short mode)
                        return;
        }
        
+       /* filter data */
+       filter= (ACTFILTER_VISIBLE | ACTFILTER_FOREDIT | ACTFILTER_IPOKEYS);
+       actdata_filter(&act_data, filter, data, datatype);
+       
        /* snap to frame */
        for (ale= act_data.first; ale; ale= ale->next) {
                if (datatype==ACTCONT_ACTION && G.saction->pin==0 && OBACT) {
@@ -1207,11 +1211,7 @@ void mirror_action_keys(short mode)
        /* get data */
        data= get_action_context(&datatype);
        if (data == NULL) return;
-               
-       /* filter data */
-       filter= (ACTFILTER_VISIBLE | ACTFILTER_FOREDIT | ACTFILTER_IPOKEYS);
-       actdata_filter(&act_data, filter, data, datatype);
-
+       
        /* determine mode */
        switch (mode) {
                case 1:
@@ -1230,6 +1230,10 @@ void mirror_action_keys(short mode)
                        return;
        }
        
+       /* filter data */
+       filter= (ACTFILTER_VISIBLE | ACTFILTER_FOREDIT | ACTFILTER_IPOKEYS);
+       actdata_filter(&act_data, filter, data, datatype);
+       
        /* mirror */
        for (ale= act_data.first; ale; ale= ale->next) {
                if (datatype==ACTCONT_ACTION && G.saction->pin==0 && OBACT) {
@@ -1554,8 +1558,7 @@ void action_set_ipo_flags (int mode)
        allqueue(REDRAWNLA, 0);
 }
 
-/* this function sets the handles on keyframes
- */
+/* this function sets the handles on keyframes */
 void sethandles_action_keys (int code)
 {
        ListBase act_data = {NULL, NULL};