Fix for fix for the bugfix :)
authorTon Roosendaal <ton@blender.org>
Thu, 21 Apr 2011 09:43:38 +0000 (09:43 +0000)
committerTon Roosendaal <ton@blender.org>
Thu, 21 Apr 2011 09:43:38 +0000 (09:43 +0000)
Just cleaned the code/order here and added comments why this works.
I should have known it... thanks Andrea for quick action!

source/blender/windowmanager/intern/wm_event_system.c

index b2ed914ea2be0781cc587af57314ed95cb64163c..b75ef359204250e96f8984624734b5d0d5bc6194 100644 (file)
@@ -1537,20 +1537,16 @@ 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.
-               */   
+               /* XXX code this for all modal ops, and ensure free only happens here */
                
-               if(handler->flag & WM_HANDLER_DO_FREE) {
-                       if (BLI_findindex(handlers, handler) >= 0) {
+               /* modal ui handler can be tagged to be freed */ 
+               if(BLI_findindex(handlers, handler) != -1) { /* could be free'd already by regular modal ops */
+                       if(handler->flag & WM_HANDLER_DO_FREE) {
                                BLI_remlink(handlers, handler);
                                wm_event_free_handler(handler);
                        }
                }
-
+               
                /* XXX fileread case */
                if(CTX_wm_window(C)==NULL)
                        return action;