From 056ac7f4070cd5ae28a66ad60138f78d595ebdbb Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Tue, 9 Jul 2024 16:22:00 +0200 Subject: [PATCH] Fix: new/free mismatch in a few cases Also see 06be295946a. These aren't all cases, but a few that I found by addding a static assert in `MEM_new` so that it fails for trivially constructible types. --- .../blenkernel/intern/grease_pencil_convert_legacy.cc | 2 +- source/blender/blenkernel/intern/linestyle.cc | 2 +- source/blender/blenkernel/intern/mesh_convert.cc | 2 +- source/blender/blenkernel/intern/mesh_legacy_convert.cc | 2 +- source/blender/blenkernel/intern/node.cc | 6 ++++-- source/blender/blenkernel/intern/preview_image.cc | 4 ++-- source/blender/blenloader/intern/versioning_400.cc | 2 +- source/blender/editors/curves/intern/curves_add.cc | 2 +- .../templates/interface_template_bone_collection_tree.cc | 2 +- .../interface_template_grease_pencil_layer_tree.cc | 2 +- .../editors/interface/templates/interface_templates.cc | 2 +- source/blender/editors/render/render_opengl.cc | 2 +- source/blender/editors/render/render_preview.cc | 2 +- source/blender/editors/render/render_shading.cc | 2 +- source/blender/editors/sculpt_paint/paint_image.cc | 2 +- source/blender/editors/sculpt_paint/paint_image_proj.cc | 2 +- source/blender/editors/space_node/node_gizmo.cc | 2 +- .../blender/editors/space_spreadsheet/spreadsheet_layout.cc | 2 +- source/blender/editors/space_view3d/view3d_select.cc | 4 ++-- source/blender/makesrna/intern/rna_nodetree.cc | 2 +- .../nodes/geometry/nodes/node_geo_attribute_capture.cc | 2 +- source/blender/nodes/geometry/nodes/node_geo_menu_switch.cc | 2 +- .../nodes/shader/nodes/node_shader_tex_pointdensity.cc | 2 +- source/blender/windowmanager/intern/wm_jobs.cc | 2 +- 24 files changed, 29 insertions(+), 27 deletions(-) diff --git a/source/blender/blenkernel/intern/grease_pencil_convert_legacy.cc b/source/blender/blenkernel/intern/grease_pencil_convert_legacy.cc index b0c313635ac..55c1cd3ae2e 100644 --- a/source/blender/blenkernel/intern/grease_pencil_convert_legacy.cc +++ b/source/blender/blenkernel/intern/grease_pencil_convert_legacy.cc @@ -1048,7 +1048,7 @@ static bNodeTree *offset_radius_node_tree_add(ConversionData &conversion_data, L &conversion_data.bmain, library, OFFSET_RADIUS_NODETREE_NAME, "GeometryNodeTree"); if (!group->geometry_node_asset_traits) { - group->geometry_node_asset_traits = MEM_new(__func__); + group->geometry_node_asset_traits = MEM_cnew(__func__); } group->geometry_node_asset_traits->flag |= GEO_NODE_ASSET_MODIFIER; diff --git a/source/blender/blenkernel/intern/linestyle.cc b/source/blender/blenkernel/intern/linestyle.cc index 21d1ec2e11b..118f322f9e1 100644 --- a/source/blender/blenkernel/intern/linestyle.cc +++ b/source/blender/blenkernel/intern/linestyle.cc @@ -68,7 +68,7 @@ static void linestyle_copy_data(Main *bmain, for (int a = 0; a < MAX_MTEX; a++) { if (linestyle_src->mtex[a]) { - linestyle_dst->mtex[a] = MEM_new(__func__); + linestyle_dst->mtex[a] = MEM_cnew(__func__); *linestyle_dst->mtex[a] = blender::dna::shallow_copy(*linestyle_src->mtex[a]); } } diff --git a/source/blender/blenkernel/intern/mesh_convert.cc b/source/blender/blenkernel/intern/mesh_convert.cc index 189686d1bed..24b3bd4ac5d 100644 --- a/source/blender/blenkernel/intern/mesh_convert.cc +++ b/source/blender/blenkernel/intern/mesh_convert.cc @@ -475,7 +475,7 @@ void BKE_mesh_to_curve_nurblist(const Mesh *mesh, ListBase *nurblist, const int VertLink *vl; /* create new 'nurb' within the curve */ - nu = MEM_new("MeshNurb", blender::dna::shallow_zero_initialize()); + nu = MEM_cnew("MeshNurb", blender::dna::shallow_zero_initialize()); nu->pntsu = faces_num; nu->pntsv = 1; diff --git a/source/blender/blenkernel/intern/mesh_legacy_convert.cc b/source/blender/blenkernel/intern/mesh_legacy_convert.cc index d41a573ed3f..0d0ba10e1a5 100644 --- a/source/blender/blenkernel/intern/mesh_legacy_convert.cc +++ b/source/blender/blenkernel/intern/mesh_legacy_convert.cc @@ -2126,7 +2126,7 @@ static bNodeTree *add_auto_smooth_node_tree(Main &bmain, Library *owner_library) bNodeTree *group = BKE_node_tree_add_in_lib( &bmain, owner_library, DATA_("Auto Smooth"), "GeometryNodeTree"); if (!group->geometry_node_asset_traits) { - group->geometry_node_asset_traits = MEM_new(__func__); + group->geometry_node_asset_traits = MEM_cnew(__func__); } group->geometry_node_asset_traits->flag |= GEO_NODE_ASSET_MODIFIER; diff --git a/source/blender/blenkernel/intern/node.cc b/source/blender/blenkernel/intern/node.cc index 720cb0b11b2..dfb14390a6d 100644 --- a/source/blender/blenkernel/intern/node.cc +++ b/source/blender/blenkernel/intern/node.cc @@ -248,7 +248,7 @@ static void ntree_copy_data(Main * /*bmain*/, } if (ntree_src->geometry_node_asset_traits) { - ntree_dst->geometry_node_asset_traits = MEM_new( + ntree_dst->geometry_node_asset_traits = MEM_cnew( __func__, *ntree_src->geometry_node_asset_traits); } @@ -309,7 +309,9 @@ static void ntree_free_data(ID *id) BKE_libblock_free_data(&ntree->id, true); } - MEM_delete(ntree->geometry_node_asset_traits); + if (ntree->geometry_node_asset_traits) { + MEM_freeN(ntree->geometry_node_asset_traits); + } if (ntree->nested_node_refs) { MEM_freeN(ntree->nested_node_refs); diff --git a/source/blender/blenkernel/intern/preview_image.cc b/source/blender/blenkernel/intern/preview_image.cc index b69cdb13dd3..e454f885067 100644 --- a/source/blender/blenkernel/intern/preview_image.cc +++ b/source/blender/blenkernel/intern/preview_image.cc @@ -99,7 +99,7 @@ void BKE_previewimg_free(PreviewImage **prv) } MEM_delete((*prv)->runtime); - MEM_delete(*prv); + MEM_freeN(*prv); *prv = nullptr; } } @@ -153,7 +153,7 @@ PreviewImage *BKE_previewimg_copy(const PreviewImage *prv) return nullptr; } - PreviewImage *prv_img = MEM_new(__func__, blender::dna::shallow_copy(*prv)); + PreviewImage *prv_img = MEM_cnew(__func__, blender::dna::shallow_copy(*prv)); prv_img->runtime = MEM_new(__func__, *prv->runtime); for (int i = 0; i < NUM_ICON_SIZES; i++) { diff --git a/source/blender/blenloader/intern/versioning_400.cc b/source/blender/blenloader/intern/versioning_400.cc index f26a3bb409a..7656ed666e2 100644 --- a/source/blender/blenloader/intern/versioning_400.cc +++ b/source/blender/blenloader/intern/versioning_400.cc @@ -2421,7 +2421,7 @@ static void enable_geometry_nodes_is_modifier(Main &bmain) return true; } if (!group->geometry_node_asset_traits) { - group->geometry_node_asset_traits = MEM_new(__func__); + group->geometry_node_asset_traits = MEM_cnew(__func__); } group->geometry_node_asset_traits->flag |= GEO_NODE_ASSET_MODIFIER; return false; diff --git a/source/blender/editors/curves/intern/curves_add.cc b/source/blender/editors/curves/intern/curves_add.cc index ebefbdb100d..229c27c62d3 100644 --- a/source/blender/editors/curves/intern/curves_add.cc +++ b/source/blender/editors/curves/intern/curves_add.cc @@ -73,7 +73,7 @@ void ensure_surface_deformation_node_exists(bContext &C, Object &curves_ob) nmd.node_group = bke::ntreeAddTree(bmain, DATA_("Surface Deform"), "GeometryNodeTree"); if (!nmd.node_group->geometry_node_asset_traits) { - nmd.node_group->geometry_node_asset_traits = MEM_new(__func__); + nmd.node_group->geometry_node_asset_traits = MEM_cnew(__func__); } nmd.node_group->geometry_node_asset_traits->flag |= GEO_NODE_ASSET_MODIFIER; diff --git a/source/blender/editors/interface/templates/interface_template_bone_collection_tree.cc b/source/blender/editors/interface/templates/interface_template_bone_collection_tree.cc index 46e38a3c45b..e1d2f70f672 100644 --- a/source/blender/editors/interface/templates/interface_template_bone_collection_tree.cc +++ b/source/blender/editors/interface/templates/interface_template_bone_collection_tree.cc @@ -445,7 +445,7 @@ eWM_DragDataType BoneCollectionDragController::get_drag_type() const void *BoneCollectionDragController::create_drag_data() const { - ArmatureBoneCollection *drag_data = MEM_new(__func__); + ArmatureBoneCollection *drag_data = MEM_cnew(__func__); *drag_data = drag_arm_bcoll_; return drag_data; } diff --git a/source/blender/editors/interface/templates/interface_template_grease_pencil_layer_tree.cc b/source/blender/editors/interface/templates/interface_template_grease_pencil_layer_tree.cc index bdf9b96d656..553da041b0f 100644 --- a/source/blender/editors/interface/templates/interface_template_grease_pencil_layer_tree.cc +++ b/source/blender/editors/interface/templates/interface_template_grease_pencil_layer_tree.cc @@ -162,7 +162,7 @@ class LayerViewItemDragController : public AbstractViewItemDragController { void *create_drag_data() const override { - wmDragGreasePencilLayer *drag_data = MEM_new(__func__); + wmDragGreasePencilLayer *drag_data = MEM_cnew(__func__); drag_data->node = &dragged_node_; drag_data->grease_pencil = &grease_pencil_; return drag_data; diff --git a/source/blender/editors/interface/templates/interface_templates.cc b/source/blender/editors/interface/templates/interface_templates.cc index 29800f65fb4..9e12bcaf5a2 100644 --- a/source/blender/editors/interface/templates/interface_templates.cc +++ b/source/blender/editors/interface/templates/interface_templates.cc @@ -5323,7 +5323,7 @@ static void CurveProfile_buttons_layout(uiLayout *layout, PointerRNA *ptr, const UI_but_funcN_set( bt, [](bContext *, void *, void *) {}, tools_cb, nullptr); - UI_block_funcN_set(block, rna_update_cb, MEM_new(__func__, cb), nullptr); + UI_block_funcN_set(block, rna_update_cb, MEM_cnew(__func__, cb), nullptr); /* The path itself */ int path_width = max_ii(uiLayoutGetWidth(layout), UI_UNIT_X); diff --git a/source/blender/editors/render/render_opengl.cc b/source/blender/editors/render/render_opengl.cc index 7b9726ecf71..f8ea36e212c 100644 --- a/source/blender/editors/render/render_opengl.cc +++ b/source/blender/editors/render/render_opengl.cc @@ -1111,7 +1111,7 @@ static bool schedule_write_result(OGLRender *oglrender, RenderResult *rr) return false; } Scene *scene = oglrender->scene; - WriteTaskData *task_data = MEM_new("write task data"); + WriteTaskData *task_data = MEM_cnew("write task data"); task_data->rr = rr; memcpy(&task_data->tmp_scene, scene, sizeof(task_data->tmp_scene)); BLI_mutex_lock(&oglrender->task_mutex); diff --git a/source/blender/editors/render/render_preview.cc b/source/blender/editors/render/render_preview.cc index 315657fa1c3..f3a96a54f4f 100644 --- a/source/blender/editors/render/render_preview.cc +++ b/source/blender/editors/render/render_preview.cc @@ -2133,7 +2133,7 @@ void ED_preview_restart_queue_free() void ED_preview_restart_queue_add(ID *id, enum eIconSizes size) { - PreviewRestartQueueEntry *queue_entry = MEM_new(__func__); + PreviewRestartQueueEntry *queue_entry = MEM_cnew(__func__); queue_entry->size = size; queue_entry->id = id; BLI_addtail(&G_restart_previews_queue, queue_entry); diff --git a/source/blender/editors/render/render_shading.cc b/source/blender/editors/render/render_shading.cc index 133dbbd0667..f2c0d0c44a4 100644 --- a/source/blender/editors/render/render_shading.cc +++ b/source/blender/editors/render/render_shading.cc @@ -2906,7 +2906,7 @@ static void paste_mtex_copybuf(ID *id) if (mtex) { if (*mtex == nullptr) { - *mtex = MEM_new("mtex copy"); + *mtex = MEM_cnew("mtex copy"); } else if ((*mtex)->tex) { id_us_min(&(*mtex)->tex->id); diff --git a/source/blender/editors/sculpt_paint/paint_image.cc b/source/blender/editors/sculpt_paint/paint_image.cc index eb73c953d46..ce36272718c 100644 --- a/source/blender/editors/sculpt_paint/paint_image.cc +++ b/source/blender/editors/sculpt_paint/paint_image.cc @@ -531,7 +531,7 @@ static int grab_clone_invoke(bContext *C, wmOperator *op, const wmEvent *event) Brush *brush = image_paint_brush(C); GrabClone *cmv; - cmv = MEM_new("GrabClone"); + cmv = MEM_cnew("GrabClone"); copy_v2_v2(cmv->startoffset, brush->clone.offset); cmv->startx = event->xy[0]; cmv->starty = event->xy[1]; diff --git a/source/blender/editors/sculpt_paint/paint_image_proj.cc b/source/blender/editors/sculpt_paint/paint_image_proj.cc index 4aa12077d56..16fbde0a0e6 100644 --- a/source/blender/editors/sculpt_paint/paint_image_proj.cc +++ b/source/blender/editors/sculpt_paint/paint_image_proj.cc @@ -5940,7 +5940,7 @@ void *paint_proj_new_stroke(bContext *C, Object *ob, const float mouse[2], int m ToolSettings *settings = scene->toolsettings; char symmetry_flag_views[BOUNDED_ARRAY_TYPE_SIZEps_views)>()] = {0}; - ps_handle = MEM_new("ProjStrokeHandle"); + ps_handle = MEM_cnew("ProjStrokeHandle"); ps_handle->scene = scene; ps_handle->brush = BKE_paint_brush(&settings->imapaint.paint); diff --git a/source/blender/editors/space_node/node_gizmo.cc b/source/blender/editors/space_node/node_gizmo.cc index 15903761eee..4caea29102d 100644 --- a/source/blender/editors/space_node/node_gizmo.cc +++ b/source/blender/editors/space_node/node_gizmo.cc @@ -322,7 +322,7 @@ static bool WIDGETGROUP_node_crop_poll(const bContext *C, wmGizmoGroupType * /*g static void WIDGETGROUP_node_crop_setup(const bContext * /*C*/, wmGizmoGroup *gzgroup) { - NodeCropWidgetGroup *crop_group = MEM_new(__func__); + NodeCropWidgetGroup *crop_group = MEM_cnew(__func__); crop_group->border = WM_gizmo_new("GIZMO_GT_cage_2d", gzgroup, nullptr); RNA_enum_set(crop_group->border->ptr, diff --git a/source/blender/editors/space_spreadsheet/spreadsheet_layout.cc b/source/blender/editors/space_spreadsheet/spreadsheet_layout.cc index f876f0e7458..4c7ff6f959e 100644 --- a/source/blender/editors/space_spreadsheet/spreadsheet_layout.cc +++ b/source/blender/editors/space_spreadsheet/spreadsheet_layout.cc @@ -368,7 +368,7 @@ class SpreadsheetLayoutDrawer : public SpreadsheetDrawer { ss << value[3]; return ss.str(); }, - MEM_new(__func__, value), + MEM_cnew(__func__, value), MEM_freeN); } diff --git a/source/blender/editors/space_view3d/view3d_select.cc b/source/blender/editors/space_view3d/view3d_select.cc index 003effb4a2e..555d31c0b93 100644 --- a/source/blender/editors/space_view3d/view3d_select.cc +++ b/source/blender/editors/space_view3d/view3d_select.cc @@ -1726,7 +1726,7 @@ static bool object_mouse_select_menu(bContext *C, if (ok) { base_count++; - BaseRefWithDepth *base_ref = MEM_new(__func__); + BaseRefWithDepth *base_ref = MEM_cnew(__func__); base_ref->base = base; base_ref->depth_id = depth_id; BLI_addtail(&base_ref_list, (void *)base_ref); @@ -1966,7 +1966,7 @@ static bool bone_mouse_select_menu(bContext *C, if (!is_duplicate_bone) { bone_count++; - BoneRefWithDepth *bone_ref = MEM_new(__func__); + BoneRefWithDepth *bone_ref = MEM_cnew(__func__); bone_ref->base = bone_base; bone_ref->bone_ptr = bone_ptr; bone_ref->depth_id = hit_result.depth; diff --git a/source/blender/makesrna/intern/rna_nodetree.cc b/source/blender/makesrna/intern/rna_nodetree.cc index 37ee050a225..acd3ccc9ede 100644 --- a/source/blender/makesrna/intern/rna_nodetree.cc +++ b/source/blender/makesrna/intern/rna_nodetree.cc @@ -1829,7 +1829,7 @@ static void geometry_node_asset_trait_flag_set(PointerRNA *ptr, { bNodeTree *ntree = static_cast(ptr->data); if (!ntree->geometry_node_asset_traits) { - ntree->geometry_node_asset_traits = MEM_new(__func__); + ntree->geometry_node_asset_traits = MEM_cnew(__func__); } SET_FLAG_FROM_TEST(ntree->geometry_node_asset_traits->flag, value, flag); } diff --git a/source/blender/nodes/geometry/nodes/node_geo_attribute_capture.cc b/source/blender/nodes/geometry/nodes/node_geo_attribute_capture.cc index 9e2cc0a878f..530e1918591 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_attribute_capture.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_attribute_capture.cc @@ -88,7 +88,7 @@ static void draw_item(uiList * /*ui_list*/, static void node_layout_ex(uiLayout *layout, bContext *C, PointerRNA *ptr) { static const uiListType *items_list = []() { - uiListType *list = MEM_new(__func__); + uiListType *list = MEM_cnew(__func__); STRNCPY(list->idname, "NODE_UL_capture_items_list"); list->draw_item = draw_item; WM_uilisttype_add(list); diff --git a/source/blender/nodes/geometry/nodes/node_geo_menu_switch.cc b/source/blender/nodes/geometry/nodes/node_geo_menu_switch.cc index 2d830584311..1202d4a65c9 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_menu_switch.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_menu_switch.cc @@ -377,7 +377,7 @@ static void node_layout_ex(uiLayout *layout, bContext *C, PointerRNA *ptr) bNode &node = *static_cast(ptr->data); static const uiListType *menu_items_list = []() { - uiListType *list = MEM_new(__func__); + uiListType *list = MEM_cnew(__func__); STRNCPY(list->idname, "NODE_UL_enum_definition_items"); list->draw_item = draw_menu_switch_item; WM_uilisttype_add(list); diff --git a/source/blender/nodes/shader/nodes/node_shader_tex_pointdensity.cc b/source/blender/nodes/shader/nodes/node_shader_tex_pointdensity.cc index 30764d4cd9c..d5c6a604fca 100644 --- a/source/blender/nodes/shader/nodes/node_shader_tex_pointdensity.cc +++ b/source/blender/nodes/shader/nodes/node_shader_tex_pointdensity.cc @@ -66,7 +66,7 @@ static void node_shader_buts_tex_pointdensity(uiLayout *layout, bContext * /*C*/ static void node_shader_init_tex_pointdensity(bNodeTree * /*ntree*/, bNode *node) { - NodeShaderTexPointDensity *point_density = MEM_new("new pd node"); + NodeShaderTexPointDensity *point_density = MEM_cnew("new pd node"); point_density->resolution = 100; point_density->radius = 0.3f; point_density->space = SHD_POINTDENSITY_SPACE_OBJECT; diff --git a/source/blender/windowmanager/intern/wm_jobs.cc b/source/blender/windowmanager/intern/wm_jobs.cc index 10e4f3ddc50..1f98bf4f538 100644 --- a/source/blender/windowmanager/intern/wm_jobs.cc +++ b/source/blender/windowmanager/intern/wm_jobs.cc @@ -208,7 +208,7 @@ wmJob *WM_jobs_get(wmWindowManager *wm, wm_job->main_thread_mutex = BLI_ticket_mutex_alloc(); WM_job_main_thread_lock_acquire(wm_job); - wm_job->worker_status.reports = MEM_new(__func__); + wm_job->worker_status.reports = MEM_cnew(__func__); BKE_reports_init(wm_job->worker_status.reports, RPT_STORE | RPT_PRINT); BKE_report_print_level_set(wm_job->worker_status.reports, RPT_WARNING); }