[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