[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [28044] trunk/blender/source/blender: Area Swap: fix memory leak and access to freed memory.

Brecht Van Lommel brecht at blender.org
Tue Apr 6 11:36:37 CEST 2010


Revision: 28044
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=28044
Author:   blendix
Date:     2010-04-06 11:36:35 +0200 (Tue, 06 Apr 2010)

Log Message:
-----------
Area Swap: fix memory leak and access to freed memory.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_screen.h
    trunk/blender/source/blender/blenkernel/intern/screen.c
    trunk/blender/source/blender/editors/screen/area.c
    trunk/blender/source/blender/editors/screen/screen_ops.c

Modified: trunk/blender/source/blender/blenkernel/BKE_screen.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_screen.h	2010-04-06 09:29:50 UTC (rev 28043)
+++ trunk/blender/source/blender/blenkernel/BKE_screen.h	2010-04-06 09:36:35 UTC (rev 28044)
@@ -227,7 +227,6 @@
 /* spacedata */
 void BKE_spacedata_freelist(ListBase *lb);
 void BKE_spacedata_copylist(ListBase *lb1, ListBase *lb2);
-void BKE_spacedata_copyfirst(ListBase *lb1, ListBase *lb2);
 
 /* area/regions */
 struct ARegion *BKE_area_region_copy(struct SpaceType *st, struct ARegion *ar);

Modified: trunk/blender/source/blender/blenkernel/intern/screen.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/screen.c	2010-04-06 09:29:50 UTC (rev 28043)
+++ trunk/blender/source/blender/blenkernel/intern/screen.c	2010-04-06 09:36:35 UTC (rev 28044)
@@ -235,27 +235,6 @@
 	}
 }
 
-/* lb1 should be empty */
-void BKE_spacedata_copyfirst(ListBase *lb1, ListBase *lb2)
-{
-	SpaceLink *sl;
-	
-	lb1->first= lb1->last= NULL;	/* to be sure */
-	
-	sl= lb2->first;
-	if(sl) {
-		SpaceType *st= BKE_spacetype_from_id(sl->spacetype);
-
-		if(st && st->duplicate) {
-			SpaceLink *slnew= st->duplicate(sl);
-
-			BLI_addtail(lb1, slnew);
-
-			region_copylist(st, &slnew->regionbase, &sl->regionbase);
-		}
-	}
-}
-
 /* not region itself */
 void BKE_area_region_free(SpaceType *st, ARegion *ar)
 {

Modified: trunk/blender/source/blender/editors/screen/area.c
===================================================================
--- trunk/blender/source/blender/editors/screen/area.c	2010-04-06 09:29:50 UTC (rev 28043)
+++ trunk/blender/source/blender/editors/screen/area.c	2010-04-06 09:36:35 UTC (rev 28044)
@@ -954,6 +954,7 @@
 {
 	SpaceType *st;
 	ARegion *ar;
+	int spacetype= sa1->spacetype;
 	
 	sa1->headertype= sa2->headertype;
 	sa1->spacetype= sa2->spacetype;
@@ -981,7 +982,7 @@
 	}
 	else {
 		if(swap_space<2) {
-			st= BKE_spacetype_from_id(sa1->spacetype);
+			st= BKE_spacetype_from_id(spacetype);
 			for(ar= sa1->regionbase.first; ar; ar= ar->next)
 				BKE_area_region_free(st, ar);
 			BLI_freelistN(&sa1->regionbase);
@@ -1004,10 +1005,6 @@
 	ED_area_exit(C, sa1);
 	ED_area_exit(C, sa2);
 
-	tmp->spacetype= sa1->spacetype;
-	tmp->butspacetype= sa1->butspacetype;
-	BKE_spacedata_copyfirst(&tmp->spacedata, &sa1->spacedata);
-
 	area_copy_data(tmp, sa1, 2);
 	area_copy_data(sa1, sa2, 0);
 	area_copy_data(sa2, tmp, 0);

Modified: trunk/blender/source/blender/editors/screen/screen_ops.c
===================================================================
--- trunk/blender/source/blender/editors/screen/screen_ops.c	2010-04-06 09:29:50 UTC (rev 28043)
+++ trunk/blender/source/blender/editors/screen/screen_ops.c	2010-04-06 09:36:35 UTC (rev 28044)
@@ -614,15 +614,16 @@
 					
 					return area_swap_cancel(C, op);
 				}
-				ED_area_swapspace(C, sad->sa1, sad->sa2);
-				
-				area_swap_exit(C, op);
-				
+
 #ifdef WM_FAST_DRAW
 				ED_area_tag_redraw(sad->sa1);
 				ED_area_tag_redraw(sad->sa2);
 #endif
 
+				ED_area_swapspace(C, sad->sa1, sad->sa2);
+				
+				area_swap_exit(C, op);
+				
 				WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL);
 				
 				return OPERATOR_FINISHED;





More information about the Bf-blender-cvs mailing list