diff options
author | Campbell Barton <ideasman42@gmail.com> | 2018-02-22 07:10:43 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2018-02-22 07:10:43 +0300 |
commit | 648df0fcdb8249d8d00ee501d6947216bb7330d5 (patch) | |
tree | 4356a8ac020cea06bf13a695e0b4309acaab448a /source | |
parent | 257cf86a05517fd66d65f55c95fc28ec945804a8 (diff) |
Revert "BKE: Changing ID freeing order."
This reverts commit 87c72a7d2714de286109573055d5d5da32ece91e.
Caused T54121 which breaks blend file saving.
For now crash on exit is preferable.
Possible solution is to free screen-manipulator batches in a separate
loop.
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/blenkernel/intern/library.c | 4 | ||||
-rw-r--r-- | source/blender/makesdna/DNA_ID.h | 4 | ||||
-rw-r--r-- | source/blender/windowmanager/intern/wm_init_exit.c | 22 |
3 files changed, 15 insertions, 15 deletions
diff --git a/source/blender/blenkernel/intern/library.c b/source/blender/blenkernel/intern/library.c index 6169263b7cf..e0608efece2 100644 --- a/source/blender/blenkernel/intern/library.c +++ b/source/blender/blenkernel/intern/library.c @@ -1067,8 +1067,6 @@ int set_listbasepointers(Main *main, ListBase **lb) * This is important because freeing data decreases usercounts of other datablocks, * if this data is its self freed it can crash. */ lb[INDEX_ID_LI] = &(main->library); /* Libraries may be accessed from pretty much any other ID... */ - lb[INDEX_ID_WS] = &(main->workspaces); /* before wm, so it's freed after it! */ - lb[INDEX_ID_WM] = &(main->wm); lb[INDEX_ID_IP] = &(main->ipo); lb[INDEX_ID_AC] = &(main->action); /* moved here to avoid problems when freeing with animato (aligorith) */ lb[INDEX_ID_KE] = &(main->key); @@ -1110,6 +1108,8 @@ int set_listbasepointers(Main *main, ListBase **lb) lb[INDEX_ID_OB] = &(main->object); lb[INDEX_ID_LS] = &(main->linestyle); /* referenced by scenes */ lb[INDEX_ID_SCE] = &(main->scene); + lb[INDEX_ID_WS] = &(main->workspaces); /* before wm, so it's freed after it! */ + lb[INDEX_ID_WM] = &(main->wm); lb[INDEX_ID_MSK] = &(main->mask); lb[INDEX_ID_NULL] = NULL; diff --git a/source/blender/makesdna/DNA_ID.h b/source/blender/makesdna/DNA_ID.h index ffa09a21944..fd8cd8b2855 100644 --- a/source/blender/makesdna/DNA_ID.h +++ b/source/blender/makesdna/DNA_ID.h @@ -519,8 +519,6 @@ enum { * keep them in sync! */ enum { INDEX_ID_LI = 0, - INDEX_ID_WS, - INDEX_ID_WM, INDEX_ID_IP, INDEX_ID_AC, INDEX_ID_KE, @@ -553,6 +551,8 @@ enum { INDEX_ID_OB, INDEX_ID_LS, INDEX_ID_SCE, + INDEX_ID_WS, + INDEX_ID_WM, INDEX_ID_MSK, INDEX_ID_NULL, }; diff --git a/source/blender/windowmanager/intern/wm_init_exit.c b/source/blender/windowmanager/intern/wm_init_exit.c index 8465ec1c608..adb03de4612 100644 --- a/source/blender/windowmanager/intern/wm_init_exit.c +++ b/source/blender/windowmanager/intern/wm_init_exit.c @@ -521,17 +521,6 @@ void WM_exit_ext(bContext *C, const bool do_python) COM_deinitialize(); #endif - if (!G.background) { -#ifdef WITH_OPENSUBDIV - BKE_subsurf_osd_cleanup(); -#endif - - GPU_global_buffer_pool_free(); - GPU_free_unused_buffers(); - - GPU_exit(); - } - BKE_blender_free(); /* blender.c, does entire library and spacetypes */ // free_matcopybuf(); ANIM_fcurves_copybuf_free(); @@ -576,6 +565,17 @@ void WM_exit_ext(bContext *C, const bool do_python) (void)do_python; #endif + if (!G.background) { +#ifdef WITH_OPENSUBDIV + BKE_subsurf_osd_cleanup(); +#endif + + GPU_global_buffer_pool_free(); + GPU_free_unused_buffers(); + + GPU_exit(); + } + BKE_undo_reset(); ED_file_exit(); /* for fsmenu */ |