Merge branch 'master' into blender2.8
[blender.git] / source / blender / editors / util / ed_util.c
index b52cc20f71f1d0ca92c554fbe7fa20e9f371de1e..8973c96c438564b9a5cb5297a28240c49cf5a95c 100644 (file)
@@ -175,18 +175,22 @@ bool ED_editors_flush_edits(const bContext *C, bool for_render)
         * objects can exist at the same time */
        for (ob = bmain->object.first; ob; ob = ob->id.next) {
                if (ob->mode & OB_MODE_SCULPT) {
-                       /* flush multires changes (for sculpt) */
-                       multires_force_update(ob);
-                       has_edited = true;
-
-                       if (for_render) {
-                               /* flush changes from dynamic topology sculpt */
-                               BKE_sculptsession_bm_to_me_for_render(ob);
-                       }
-                       else {
-                               /* Set reorder=false so that saving the file doesn't reorder
-                                * the BMesh's elements */
-                               BKE_sculptsession_bm_to_me(ob, false);
+                       /* Don't allow flushing while in the middle of a stroke (frees data in use).
+                        * Auto-save prevents this from happening but scripts may cause a flush on saving: T53986. */
+                       if ((ob->sculpt && ob->sculpt->cache) == 0) {
+                               /* flush multires changes (for sculpt) */
+                               multires_force_update(ob);
+                               has_edited = true;
+
+                               if (for_render) {
+                                       /* flush changes from dynamic topology sculpt */
+                                       BKE_sculptsession_bm_to_me_for_render(ob);
+                               }
+                               else {
+                                       /* Set reorder=false so that saving the file doesn't reorder
+                                        * the BMesh's elements */
+                                       BKE_sculptsession_bm_to_me(ob, false);
+                               }
                        }
                }
                else if (ob->mode & OB_MODE_EDIT) {