[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [17795] branches/blender2.5/blender/source /blender: 2.5 - Fixed crashes when closing windows

Joshua Leung aligorith at gmail.com
Fri Dec 12 00:05:18 CET 2008


Revision: 17795
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=17795
Author:   aligorith
Date:     2008-12-12 00:05:18 +0100 (Fri, 12 Dec 2008)

Log Message:
-----------
2.5 - Fixed crashes when closing windows 

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/blenkernel/intern/screen.c
    branches/blender2.5/blender/source/blender/editors/interface/interface_handlers.c

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/screen.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/screen.c	2008-12-11 23:02:33 UTC (rev 17794)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/screen.c	2008-12-11 23:05:18 UTC (rev 17795)
@@ -164,15 +164,19 @@
 /* don't free screen itself */
 void free_screen(bScreen *sc)
 {
-	ScrArea *sa;
-	ARegion *ar;
+	ScrArea *sa, *san;
+	ARegion *ar, *arn;
 	
-	for(ar=sc->regionbase.first; ar; ar=ar->next)
+	for(ar=sc->regionbase.first; ar; ar=arn) {
+		arn= ar->next;
 		BKE_area_region_free(ar);
+	}
 	BLI_freelistN(&sc->regionbase);
 	
-	for(sa= sc->areabase.first; sa; sa= sa->next)
+	for(sa= sc->areabase.first; sa; sa= san) {
+		san= sa->next;
 		BKE_screen_area_free(sa);
+	}
 	
 	BLI_freelistN(&sc->vertbase);
 	BLI_freelistN(&sc->edgebase);

Modified: branches/blender2.5/blender/source/blender/editors/interface/interface_handlers.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/interface/interface_handlers.c	2008-12-11 23:02:33 UTC (rev 17794)
+++ branches/blender2.5/blender/source/blender/editors/interface/interface_handlers.c	2008-12-11 23:05:18 UTC (rev 17795)
@@ -3530,17 +3530,21 @@
 
 static void ui_handler_remove_region(bContext *C)
 {
+	bScreen *sc;
 	ARegion *ar;
 
 	ar= C->region;
-	if(ar==NULL) return;
+	if(ar == NULL) return;
 
 	uiFreeBlocks(C, &ar->uiblocks);
+	
+	sc= C->screen;
+	if(sc == NULL) return;
 
 	/* delayed apply callbacks, but not for screen level regions, those
 	 * we rather do at the very end after closing them all, which will
 	 * be done in ui_handler_region/window */
-	if(BLI_findindex(&C->screen->regionbase, ar) == -1)
+	if(BLI_findindex(&sc->regionbase, ar) == -1)
 		ui_apply_but_funcs_after(C);
 }
 





More information about the Bf-blender-cvs mailing list