diff options
author | Andrea Weikert <elubie@gmx.net> | 2011-04-21 00:46:02 +0400 |
---|---|---|
committer | Andrea Weikert <elubie@gmx.net> | 2011-04-21 00:46:02 +0400 |
commit | 2d9c94604a375505f076da157875afc4186be35f (patch) | |
tree | c1a31f3f8439e793a63edeb1f4f89f4cac92ba99 | |
parent | a6c2d8680bd0288d00cc4728e67535a69e8fccfa (diff) |
fix crash with lots of operators when running "blender -d". Easy case to reproduce, just try to delete default cube.
Temporary hack to prevent crasher, likely caused by rev. 36242.
-rw-r--r-- | source/blender/windowmanager/intern/wm_event_system.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c index c9e2567a45b..b2ed914ea2b 100644 --- a/source/blender/windowmanager/intern/wm_event_system.c +++ b/source/blender/windowmanager/intern/wm_event_system.c @@ -1538,12 +1538,19 @@ static int wm_handlers_do(bContext *C, wmEvent *event, ListBase *handlers) } /* modal ui handler can be tagged to be freed */ + /* XXX TODO - handler was free'd in wm_handler_ui_call + and memory could be written to in BLI_remlink. + As temporary solution preventing this by + making sure handler is still in the list. + */ + if(handler->flag & WM_HANDLER_DO_FREE) { - BLI_remlink(handlers, handler); - wm_event_free_handler(handler); + if (BLI_findindex(handlers, handler) >= 0) { + BLI_remlink(handlers, handler); + wm_event_free_handler(handler); + } } - /* XXX fileread case */ if(CTX_wm_window(C)==NULL) return action; |