Fix T90972: Crash calling Mesh.clear_geometry in edit-mode
No longer free the edit-mesh pointer while in edit-mode since this
isn't reliable to keep the object in edit-mode while freeing it's
edit-mesh data.
Users who want to exit edit-mode should do so explicitly.
Caused by 6d2f9b1dfa
.
This commit is contained in:
parent
0708733c46
commit
19e1b5c1fd
Notes:
blender-bot
2023-02-13 22:38:46 +01:00
Referenced by issue #90972, Crash calling Mesh.clear_geometry in edit-mode
|
@ -886,6 +886,18 @@ void BKE_mesh_free_data_for_undo(Mesh *me)
|
|||
mesh_free_data(&me->id);
|
||||
}
|
||||
|
||||
/**
|
||||
* \note on data that this function intentionally doesn't free:
|
||||
*
|
||||
* - Materials and shape keys are not freed here (#Mesh.mat & #Mesh.key).
|
||||
* As freeing shape keys requires tagging the depsgraph for updated relations,
|
||||
* which is expensive.
|
||||
* Material slots should be kept in sync with the object.
|
||||
*
|
||||
* - Edit-Mesh (#Mesh.edit_mesh)
|
||||
* Since edit-mesh is tied to the objects mode,
|
||||
* which crashes when called in edit-mode, see: T90972.
|
||||
*/
|
||||
static void mesh_clear_geometry(Mesh *mesh)
|
||||
{
|
||||
CustomData_free(&mesh->vdata, mesh->totvert);
|
||||
|
@ -895,11 +907,6 @@ static void mesh_clear_geometry(Mesh *mesh)
|
|||
CustomData_free(&mesh->pdata, mesh->totpoly);
|
||||
|
||||
MEM_SAFE_FREE(mesh->mselect);
|
||||
MEM_SAFE_FREE(mesh->edit_mesh);
|
||||
|
||||
/* Note that materials and shape keys are not freed here. This is intentional, as freeing
|
||||
* shape keys requires tagging the depsgraph for updated relations, which is expensive.
|
||||
* Material slots should be kept in sync with the object. */
|
||||
|
||||
mesh->totvert = 0;
|
||||
mesh->totedge = 0;
|
||||
|
|
Loading…
Reference in New Issue