Fix (unreported) crash when opening a file from splash screen when 'load UI' option is disabled.
Took me some time to figure out what was going on here... Was again that delayed button callback stuff (`ui_apply_but_funcs_after()`), first calling button op, and then its callback func. Issue was that 'open file' op (through call to `WM_file_read()`) would clear the splash screen (as more or less the entire 'dynamic' UI), but callback func of that splash (`wm_block_splash_refreshmenu()`) would still try to access that freed menu's region. So, root of the issue seems to be that setting context's wm/win/etc. would not clear context's menu pointer (while clearing all other 'sub' pointers). I could not find nor imagine any case where this behavior could be desired, so simply added nullification of that pointer when setting context's wm/win/etc. Note that crash was due to read-after-free, infuriating debug builds with asan, but seems like release builds never actually crashed on it.
This commit is contained in:
parent
125d5d2be5
commit
935e241fa6
Notes:
blender-bot
2024-03-22 15:57:27 +01:00
Referenced by commita0db3c3966
, Fix (unreported) crash when opening a file from splash screen when 'load UI' option is disabled. Referenced by commit607d916f50
, Fix T47632: Revert "Fix (unreported) crash when opening a file from splash screen when 'load UI' option is disabled." Referenced by issue blender/blender-addons#47632, Redrawing dialogs
|
@ -820,6 +820,7 @@ void CTX_wm_manager_set(bContext *C, wmWindowManager *wm)
|
|||
C->wm.screen = NULL;
|
||||
C->wm.area = NULL;
|
||||
C->wm.region = NULL;
|
||||
C->wm.menu = NULL;
|
||||
}
|
||||
|
||||
void CTX_wm_window_set(bContext *C, wmWindow *win)
|
||||
|
@ -830,6 +831,7 @@ void CTX_wm_window_set(bContext *C, wmWindow *win)
|
|||
C->data.scene = C->wm.screen->scene;
|
||||
C->wm.area = NULL;
|
||||
C->wm.region = NULL;
|
||||
C->wm.menu = NULL;
|
||||
}
|
||||
|
||||
void CTX_wm_screen_set(bContext *C, bScreen *screen)
|
||||
|
@ -839,17 +841,20 @@ void CTX_wm_screen_set(bContext *C, bScreen *screen)
|
|||
C->data.scene = C->wm.screen->scene;
|
||||
C->wm.area = NULL;
|
||||
C->wm.region = NULL;
|
||||
C->wm.menu = NULL;
|
||||
}
|
||||
|
||||
void CTX_wm_area_set(bContext *C, ScrArea *area)
|
||||
{
|
||||
C->wm.area = area;
|
||||
C->wm.region = NULL;
|
||||
C->wm.menu = NULL;
|
||||
}
|
||||
|
||||
void CTX_wm_region_set(bContext *C, ARegion *region)
|
||||
{
|
||||
C->wm.region = region;
|
||||
C->wm.menu = NULL;
|
||||
}
|
||||
|
||||
void CTX_wm_menu_set(bContext *C, ARegion *menu)
|
||||
|
|
Loading…
Reference in New Issue