[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [31321] trunk/blender/source/blender/ windowmanager/intern/wm_event_system.c: bugfix [#22845] Python operators dont free report list

Campbell Barton ideasman42 at gmail.com
Fri Aug 13 18:34:22 CEST 2010


Revision: 31321
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=31321
Author:   campbellbarton
Date:     2010-08-13 18:34:21 +0200 (Fri, 13 Aug 2010)

Log Message:
-----------
bugfix [#22845] Python operators dont free report list

Modified Paths:
--------------
    trunk/blender/source/blender/windowmanager/intern/wm_event_system.c

Modified: trunk/blender/source/blender/windowmanager/intern/wm_event_system.c
===================================================================
--- trunk/blender/source/blender/windowmanager/intern/wm_event_system.c	2010-08-13 15:26:37 UTC (rev 31320)
+++ trunk/blender/source/blender/windowmanager/intern/wm_event_system.c	2010-08-13 16:34:21 UTC (rev 31321)
@@ -425,6 +425,14 @@
 	}
 }
 
+/* this function is mainly to check that the rules for freeing
+ * an operator are kept in sync.
+ */
+static int wm_operator_register_check(wmWindowManager *wm, wmOperatorType *ot)
+{
+	return (wm->op_undo_depth == 0) && (ot->flag & OPTYPE_REGISTER);
+}
+
 static void wm_operator_finished(bContext *C, wmOperator *op, int repeat)
 {
 	wmWindowManager *wm= CTX_wm_manager(C);
@@ -445,7 +453,7 @@
 			MEM_freeN(buf);
 		}
 
-		if((wm->op_undo_depth == 0) && (op->type->flag & OPTYPE_REGISTER))
+		if(wm_operator_register_check(wm, op->type))
 			wm_operator_register(C, op);
 		else
 			WM_operator_free(op);
@@ -807,11 +815,11 @@
 */
 int WM_operator_call_py(bContext *C, wmOperatorType *ot, int context, PointerRNA *properties, ReportList *reports)
 {
+	wmWindowManager *wm=	CTX_wm_manager(C);
 	int retval= OPERATOR_CANCELLED;
 
 #if 0
 	wmOperator *op;
-	wmWindowManager *wm=	CTX_wm_manager(C);
 	op= wm_operator_create(wm, ot, properties, reports);
 
 	if (op->type->exec) {
@@ -830,9 +838,9 @@
 	retval= wm_operator_call_internal(C, ot, context, properties, reports);
 	
 	/* keep the reports around if needed later */
-	if (retval & OPERATOR_RUNNING_MODAL || ot->flag & OPTYPE_REGISTER)
+	if (retval & OPERATOR_RUNNING_MODAL || wm_operator_register_check(wm, ot))
 	{
-		reports->flag |= RPT_FREE;
+		reports->flag |= RPT_FREE; /* let blender manage freeing */
 	}
 	
 	return retval;





More information about the Bf-blender-cvs mailing list