[Bf-committers] [Bf-blender-cvs] SVN commit: /data/svn/bf-blender [23223] trunk/blender/source/blender: Bugfix with py operator api and modal operators.

Campbell Barton ideasman42 at gmail.com
Tue Sep 15 08:39:58 CEST 2009


Not sure if its this commit exactly that breaks it but recently I get
crashes/eternal loops when holding the left arrow in the py console.
Valgrind points to using a freed report pointer.

==12821== Invalid read of size 4
==12821==    at 0x81EB468: WM_operator_free (wm.c:72)
==12821==    by 0x81EB543: wm_operator_register (wm.c:102)
==12821==    by 0x81EC92C: wm_operator_invoke (wm_event_system.c:430)
==12821==    by 0x81ED6D7: wm_handler_operator_call (wm_event_system.c:844)
==12821==    by 0x81EDD09: wm_handlers_do (wm_event_system.c:1024)
==12821==    by 0x81EE3C7: wm_event_do_handlers (wm_event_system.c:1193)
==12821==    by 0x81EBA89: WM_main (wm.c:268)
==12821==    by 0x81EB33B: main (creator.c:846)
==12821==  Address 0x6f56350 is 48 bytes inside a block of size 64 free'd
==12821==    at 0x4023516: free (in
/usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==12821==    by 0x8741C63: rem_memblock (mallocn.c:595)
==12821==    by 0x874198E: MEM_freeN (mallocn.c:512)
==12821==    by 0x850521F: pyop_call (bpy_operator.c:95)
==12821==    by 0x4601A12: PyCFunction_Call (methodobject.c:81)
==12821==    by 0x4689DCC: call_function (ceval.c:3744)
==12821==    by 0x4684E46: PyEval_EvalFrameEx (ceval.c:2530)
==12821==    by 0x4688012: PyEval_EvalCodeEx (ceval.c:3180)
==12821==    by 0x45E6A40: function_call (funcobject.c:628)
==12821==    by 0x45B134E: PyObject_Call (abstract.c:2160)
==12821==    by 0x45CD44F: method_call (classobject.c:323)
==12821==    by 0x45B134E: PyObject_Call (abstract.c:2160)




On Mon, Sep 14, 2009 at 9:00 AM, Martin Poirier <theeth at yahoo.com> wrote:
> Revision: 23223
>          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=23223
> Author:   theeth
> Date:     2009-09-14 18:00:42 +0200 (Mon, 14 Sep 2009)
>
> Log Message:
> -----------
> Bugfix with py operator api and modal operators. Modal operators would keep a reference to Reports locally allocated in the api functions, which would crash and burn later when the operator would actually stop.
>
> This commit introduces a flag at the Reports level that can be used to indicate that it needs to be freed (on top of the flag already existing in the operator, which I guess could be removed).
>
> Reports for operators called through python are only persisted if they indicate that they are running modal.
>
> Modified Paths:
> --------------
>    trunk/blender/source/blender/makesdna/DNA_windowmanager_types.h
>    trunk/blender/source/blender/python/intern/bpy_operator.c
>    trunk/blender/source/blender/windowmanager/intern/wm.c
>    trunk/blender/source/blender/windowmanager/intern/wm_event_system.c
>
> Modified: trunk/blender/source/blender/makesdna/DNA_windowmanager_types.h
> ===================================================================
> --- trunk/blender/source/blender/makesdna/DNA_windowmanager_types.h     2009-09-14 14:55:49 UTC (rev 23222)
> +++ trunk/blender/source/blender/makesdna/DNA_windowmanager_types.h     2009-09-14 16:00:42 UTC (rev 23223)
> @@ -80,6 +80,7 @@
>  enum ReportListFlags {
>        RPT_PRINT = 1,
>        RPT_STORE = 2,
> +       RPT_FREE = 4,
>  };
>  typedef struct Report {
>        struct Report *next, *prev;
>
> Modified: trunk/blender/source/blender/python/intern/bpy_operator.c
> ===================================================================
> --- trunk/blender/source/blender/python/intern/bpy_operator.c   2009-09-14 14:55:49 UTC (rev 23222)
> +++ trunk/blender/source/blender/python/intern/bpy_operator.c   2009-09-14 16:00:42 UTC (rev 23223)
> @@ -79,16 +79,21 @@
>
>
>        if (error_val==0) {
> -               ReportList reports;
> +               ReportList *reports;
>
> -               BKE_reports_init(&reports, RPT_STORE);
> +               reports= MEM_mallocN(sizeof(ReportList), "wmOperatorReportList");
> +               BKE_reports_init(reports, RPT_STORE);
>
> -               WM_operator_call_py(C, ot, context, &ptr, &reports);
> +               WM_operator_call_py(C, ot, context, &ptr, reports);
>
> -               if(BPy_reports_to_error(&reports))
> +               if(BPy_reports_to_error(reports))
>                        error_val = -1;
>
> -               BKE_reports_clear(&reports);
> +               BKE_reports_clear(reports);
> +               if ((reports->flag & RPT_FREE) == 0)
> +               {
> +                       MEM_freeN(reports);
> +               }
>        }
>
>        WM_operator_properties_free(&ptr);
>
> Modified: trunk/blender/source/blender/windowmanager/intern/wm.c
> ===================================================================
> --- trunk/blender/source/blender/windowmanager/intern/wm.c      2009-09-14 14:55:49 UTC (rev 23222)
> +++ trunk/blender/source/blender/windowmanager/intern/wm.c      2009-09-14 16:00:42 UTC (rev 23223)
> @@ -69,7 +69,7 @@
>                MEM_freeN(op->properties);
>        }
>
> -       if(op->reports && (op->flag & OPERATOR_REPORT_FREE)) {
> +       if(op->reports && ((op->flag & OPERATOR_REPORT_FREE) || (op->reports->flag & RPT_FREE))) {
>                BKE_reports_clear(op->reports);
>                MEM_freeN(op->reports);
>        }
>
> Modified: trunk/blender/source/blender/windowmanager/intern/wm_event_system.c
> ===================================================================
> --- trunk/blender/source/blender/windowmanager/intern/wm_event_system.c 2009-09-14 14:55:49 UTC (rev 23222)
> +++ trunk/blender/source/blender/windowmanager/intern/wm_event_system.c 2009-09-14 16:00:42 UTC (rev 23223)
> @@ -555,6 +555,11 @@
>
>        retval= wm_operator_call_internal(C, ot, context, properties, reports);
>
> +       if (retval & OPERATOR_RUNNING_MODAL)
> +       {
> +               reports->flag |= RPT_FREE;
> +       }
> +
>        return retval;
>  }
>
>
>
> _______________________________________________
> Bf-blender-cvs mailing list
> Bf-blender-cvs at blender.org
> http://lists.blender.org/mailman/listinfo/bf-blender-cvs
>



-- 
- Campbell


More information about the Bf-committers mailing list