diff options
author | Bastien Montagne <b.mont29@gmail.com> | 2020-03-13 19:34:21 +0300 |
---|---|---|
committer | Bastien Montagne <b.mont29@gmail.com> | 2020-03-13 19:34:21 +0300 |
commit | ebf3c87912364296d6548a6e7b09da0deda81b66 (patch) | |
tree | 1743258173eb9d555ab081e9187a9dee938b23f1 /source/blender/editors/space_file/filesel.c | |
parent | 5ad16e6a114b0a22f0cbedfa57d2457c31058f95 (diff) |
Fix T74699: File browser closing while loading crash.
Owner of filelisting job was changed, without proper update of all
access/usages of that owner to reach the job, leading to failure of
timer removal from the WM, and attempt to double-free the job...
Caused by rB2c4dfbb00246ff.
Diffstat (limited to 'source/blender/editors/space_file/filesel.c')
-rw-r--r-- | source/blender/editors/space_file/filesel.c | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/source/blender/editors/space_file/filesel.c b/source/blender/editors/space_file/filesel.c index c0b859122a8..ef7ecff5da7 100644 --- a/source/blender/editors/space_file/filesel.c +++ b/source/blender/editors/space_file/filesel.c @@ -829,10 +829,9 @@ void ED_file_change_dir(bContext *C) { wmWindowManager *wm = CTX_wm_manager(C); SpaceFile *sfile = CTX_wm_space_file(C); - ScrArea *sa = CTX_wm_area(C); if (sfile->params) { - ED_fileselect_clear(wm, sa, sfile); + ED_fileselect_clear(wm, CTX_data_scene(C), sfile); /* Clear search string, it is very rare to want to keep that filter while changing dir, * and usually very annoying to keep it actually! */ @@ -951,11 +950,11 @@ int autocomplete_file(struct bContext *C, char *str, void *UNUSED(arg_v)) return match; } -void ED_fileselect_clear(wmWindowManager *wm, ScrArea *sa, SpaceFile *sfile) +void ED_fileselect_clear(wmWindowManager *wm, Scene *owner_scene, SpaceFile *sfile) { /* only NULL in rare cases - [#29734] */ if (sfile->files) { - filelist_readjob_stop(wm, sa); + filelist_readjob_stop(wm, owner_scene); filelist_freelib(sfile->files); filelist_clear(sfile->files); } @@ -964,7 +963,7 @@ void ED_fileselect_clear(wmWindowManager *wm, ScrArea *sa, SpaceFile *sfile) WM_main_add_notifier(NC_SPACE | ND_SPACE_FILE_LIST, NULL); } -void ED_fileselect_exit(wmWindowManager *wm, ScrArea *sa, SpaceFile *sfile) +void ED_fileselect_exit(wmWindowManager *wm, Scene *owner_scene, SpaceFile *sfile) { if (!sfile) { return; @@ -990,7 +989,7 @@ void ED_fileselect_exit(wmWindowManager *wm, ScrArea *sa, SpaceFile *sfile) folderlist_free(sfile->folders_next); if (sfile->files) { - ED_fileselect_clear(wm, sa, sfile); + ED_fileselect_clear(wm, owner_scene, sfile); filelist_free(sfile->files); MEM_freeN(sfile->files); sfile->files = NULL; |