Page MenuHome

Crash in Curve Editing.
Closed, ResolvedPublic

Description

  • OS: Windows 10 Pro.

-Graphic card: Intel(R) UHD Graphics 610.

  • Processor: Intel Celeron(R) G4920 CPU.
  • RAM: 8 GB.
  • Blender Version: 2.92.0.
  • Short description of error. Crash in Curve Editing.
  • Exact steps for other to reproduce the error.
    • File, New, 2D Animation.
    • Line, Enter. Or Draw.
    • Edit Mode.
    • Select Mode Only points.
    • Curve Editing, Activate.
    • Select 1 point. Select Tangent.
    • Clic Right, Separate.


Event Timeline

Philipp Oeser (lichtwerk) changed the task status from Needs Triage to Confirmed.May 14 2021, 10:34 AM
Philipp Oeser (lichtwerk) claimed this task.

Can confirm, will check

@Pedro (aguilamotera) I cannot reproduce this in the 2.93 Beta or 3.0.0 Alpha. I believe this was already fixed in the newer versions. You can try out the beta by downloading it from https://builder.blender.org/download/.

Blender 3.0 Alpha un moment.
Blender 3.0 Alpha. Crash.

Blender 2.92. With Ubuntu in same PC. Crash.
Blender 3.0 Alpha in Ubuntu (In same PC). Crash.
Now MackBook Pro, un moment.
MackBook Pro, macOS Sierra 10.12.6. I can't test it, have an old pc

This might be Windows specific then? @Philipp Oeser (lichtwerk) will probably find what's causing the crash.

Problem comes into play after transforming a curve point [which then happens to clear the stroke GP_STROKE_SELECT flag] see BKE_gpencil_stroke_update_geometry_from_editcurve.

1  BKE_gpencil_stroke_update_geometry_from_editcurve gpencil_curve.c             1138 0x3b6d0c2 
2  BKE_gpencil_stroke_geometry_update                gpencil_geom.c              1318 0x36079d5 
3  recalcData_gpencil_strokes                        transform_convert_gpencil.c 770  0x4ab4ad0 
4  recalcData                                        transform_convert.c         1695 0x4aaa176 
5  applyTranslation                                  transform_mode_translate.c  432  0x4b0b9e7 
6  transformApply                                    transform.c                 1882 0x4aa2987 
7  transform_modal                                   transform_ops.c             440  0x4b11adf 
8  wm_handler_operator_call                          wm_event_system.c           2081 0x3be54b5 
9  wm_handlers_do_intern                             wm_event_system.c           2910 0x3be7a85 
10 wm_handlers_do                                    wm_event_system.c           2958 0x3be7bcb 
11 wm_event_do_handlers                              wm_event_system.c           3378 0x3be8dfb 
12 WM_main                                           wm.c                        647  0x3bdcc5b 
13 main                                              creator.c                   519  0x35c7a72

Not sure why this needs to be like that, but the problem can also be seen when when there are simply no curve points selected.
Code then hangs in gpencil_stroke_separate_exec when removing unused material slots.
Wrong assumptions here I think, the gpd->totcol is zero here (whereas the ob->totcol is not), so BKE_object_material_slot_remove will always fail.
I think this should be solved prior though, if nothing is selected, we probably should not create an ob in the first place? (at least no one that does not have its materials set up properly?)

/* Remove unused slots. */
int actcol = ob_dst->actcol;
for (int slot = 1; slot <= ob_dst->totcol; slot++) {
  while (slot <= ob_dst->totcol && !BKE_object_material_slot_used(ob_dst->data, slot)) {
    ob_dst->actcol = slot;
    BKE_object_material_slot_remove(bmain, ob_dst);
    if (actcol >= slot) {
      actcol--;
    }
  }
}

@Falk David (filedescriptor) : feel free to take over, this seems more like your playground?