View Issue Details

IDProjectCategoryView StatusLast Update
0006158ardourbugspublic2019-06-13 08:57
Reporterahellquist Assigned Tochaot  
PrioritynormalSeveritycrashReproducibilityalways
Status closedResolutionfixed 
Summary0006158: Pressing ESC from tempo dialogue seg faults Ardour
DescriptionFedora 21
Ardour 3.5.40593.5-4425-g9fab393

Pressing esc does nothing visible but triggers a seg fault
Additional InformationRelated to 0006132
TagsNo tags attached.

Relationships

related to 0006132 closeddrobilla Tempo dialog needs focus on BPM, not tap tempo 

Activities

paul

2015-02-04 17:46

administrator   ~0016320

Escape does nothing for me (and is not intended to).

A backtrace will be needed to get some clue about what is going on.

http://ardour.org/debugging_ardour

tlat

2015-03-05 13:24

reporter   ~0016398

ESC seems assigned to "Break drag or deselect all" by default.

The segfault is reproducible when we edit tempo or meter with a double
click on the respective marker (right click and [Edit...] works).

The tempo-edit-window blocks `finished' within `Drag::end_grab'.
ESC triggers `DragManager::abort' and when this window is closed,
`_editor->verbose_cursor' causes a segfault because the Drag is deleted.

Another segfault is caused by `delete' in `DragManager::end_grab',
after the return from Drag::end_grab.

Attached the backtrace and a patch with a possible solution.

2015-03-05 13:25

 

drag_segfault.patch (612 bytes)   
diff --git a/gtk2_ardour/editor_drag.cc b/gtk2_ardour/editor_drag.cc
index f8b08d2..e89ef28 100644
--- a/gtk2_ardour/editor_drag.cc
+++ b/gtk2_ardour/editor_drag.cc
@@ -156,6 +156,11 @@ DragManager::end_grab (GdkEvent* e)
 		if (t) {
 			r = true;
 		}
+
+		if (_drags.empty()) {
+			break;
+		}
+
 		delete *i;
 	}
 
@@ -315,8 +320,10 @@ Drag::end_grab (GdkEvent* event)
 
 	finished (event, _move_threshold_passed);
 
-	_editor->verbose_cursor()->hide ();
-	_cursor_ctx.reset();
+	if (_drags->active()) {
+		_editor->verbose_cursor()->hide ();
+		_cursor_ctx.reset();
+	}
 
 	return _move_threshold_passed;
 }
drag_segfault.patch (612 bytes)   

2015-03-05 13:25

 

bt.log (4,137 bytes)   
#0  0x00000000067edbc0 in ?? ()
#1  0x000000000113f236 in Drag::end_grab (this=0x6d98860, event=0x7fffffffc6a0)
    at ../gtk2_ardour/editor_drag.cc:318
#2  0x000000000113ea2f in DragManager::end_grab (this=0x2c745f0, e=0x7fffffffc6a0)
    at ../gtk2_ardour/editor_drag.cc:155
#3  0x0000000001191e56 in Editor::button_release_handler (this=0x2b51770, item=0x80d86e0, 
    event=0x7fffffffc6a0, item_type=TempoMarkerItem) at ../gtk2_ardour/editor_mouse.cc:1198
#4  0x0000000001138f79 in Editor::typed_event (this=0x2b51770, item=0x80d86e0, event=0x7fffffffc6a0, 
    type=TempoMarkerItem) at ../gtk2_ardour/editor_canvas_events.cc:222
#5  0x000000000113a9a7 in Editor::canvas_tempo_marker_event (this=0x2b51770, event=0x7fffffffc6a0, 
    item=0x80d86e0) at ../gtk2_ardour/editor_canvas_events.cc:1015
#6  0x0000000001367e5c in sigc::bound_mem_functor3<bool, PublicEditor, _GdkEvent*, ArdourCanvas::Item*, TempoMarker*>::operator() (this=0x71416f0, _A_a1=@0x7fffffffc580: 0x7fffffffc6a0, 
    _A_a2=@0x7fffffffc318: 0x80d86e0, _A_a3=@0x7141718: 0x6ef2c30)
    at /usr/include/sigc++-2.0/sigc++/functors/mem_fun.h:1985
#7  0x0000000001367995 in sigc::adaptor_functor<sigc::bound_mem_functor3<bool, PublicEditor, _GdkEvent*, ArdourCanvas::Item*, TempoMarker*> >::operator()<_GdkEvent* const&, ArdourCanvas::Container*&, TempoMarker*&> (this=0x71416e8, _A_arg1=@0x7fffffffc580: 0x7fffffffc6a0, _A_arg2=@0x7141710: 0x80d86e0, 
    _A_arg3=@0x7141718: 0x6ef2c30) at /usr/include/sigc++-2.0/sigc++/adaptors/adaptor_trait.h:123
#8  0x0000000001367424 in sigc::bind_functor<-1, sigc::bound_mem_functor3<bool, PublicEditor, _GdkEvent*, ArdourCanvas::Item*, TempoMarker*>, ArdourCanvas::Container*, TempoMarker*, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil>::operator()<_GdkEvent* const&> (this=0x71416e0, 
    _A_arg1=@0x7fffffffc580: 0x7fffffffc6a0) at /usr/include/sigc++-2.0/sigc++/adaptors/bind.h:1336
#9  0x0000000001366cca in sigc::internal::slot_call1<sigc::bind_functor<-1, sigc::bound_mem_functor3<bool, PublicEditor, _GdkEvent*, ArdourCanvas::Item*, TempoMarker*>, ArdourCanvas::Container*, TempoMarker*, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil>, bool, _GdkEvent*>::call_it (rep=0x71416b0, 
    a_1=@0x7fffffffc580: 0x7fffffffc6a0) at /usr/include/sigc++-2.0/sigc++/functors/slot.h:137
#10 0x00007ffff79119c7 in sigc::internal::signal_emit1<bool, _GdkEvent*, ArdourCanvas::Item::EventAccumulator<bool> >::operator() (this=0x7fffffffc430, _A_slot=...) at /usr/include/sigc++-2.0/sigc++/signal.h:830
#11 0x00007ffff79115dd in sigc::internal::slot_iterator_buf<sigc::internal::signal_emit1<bool, _GdkEvent*, ArdourCanvas::Item::EventAccumulator<bool> >, bool>::operator* (this=0x7fffffffc3f0)
    at /usr/include/sigc++-2.0/sigc++/signal.h:302
#12 0x00007ffff7910fdb in ArdourCanvas::Item::EventAccumulator<bool>::operator()<sigc::internal::slot_iterator_buf<sigc::internal::signal_emit1<bool, _GdkEvent*, ArdourCanvas::Item::EventAccumulator<bool> >, bool> > (this=0x7fffffffc45f, first=..., last=...) at /mnt/part/src/ardour/libs/canvas/canvas/item.h:214
#13 0x00007ffff79106d0 in sigc::internal::signal_emit1<bool, _GdkEvent*, ArdourCanvas::Item::EventAccumulator<bool> >::emit (impl=0x6c8ec00, _A_a1=@0x7fffffffc580: 0x7fffffffc6a0)
    at /usr/include/sigc++-2.0/sigc++/signal.h:850
#14 0x00007ffff790f3b7 in sigc::signal1<bool, _GdkEvent*, ArdourCanvas::Item::EventAccumulator<bool> >::emit (this=0x80d8750, _A_a1=@0x7fffffffc580: 0x7fffffffc6a0)
    at /usr/include/sigc++-2.0/sigc++/signal.h:2777
#15 0x00007ffff790d8ad in sigc::signal1<bool, _GdkEvent*, ArdourCanvas::Item::EventAccumulator<bool> >::operator() (this=0x80d8750, _A_a1=@0x7fffffffc580: 0x7fffffffc6a0)
    at /usr/include/sigc++-2.0/sigc++/signal.h:2785
#16 0x00007ffff79094e7 in ArdourCanvas::GtkCanvas::deliver_event (this=0x2d38768, event=0x7fffffffc6a0)
    at ../libs/canvas/canvas.cc:690
#17 0x00007ffff790a721 in ArdourCanvas::GtkCanvas::on_button_release_event (this=0x2d38768, ev=0x813e8a0)
    at ../libs/canvas/canvas.cc:916
#18 0x00007ffff1e140b4 in Gtk::Widget_Class::button_release_event_callback(_GtkWidget*, _GdkEventButton*)
bt.log (4,137 bytes)   

ahellquist

2015-03-13 22:51

reporter   ~0016427

tested again with 3.5 4747 and this has been resolved along the way

tlat

2015-03-14 10:57

reporter   ~0016436

sorry @ahellquist, reopened because it continues to crash here also
after the last b72fc75 (perhaps now your ESC key is not assigned to
"Break drag or deselect all").

Example:

- double click on tempo marker (no right click and edit button)
- press ESC (or the key assigned to "Break drag or deselect all")
- close the dialog (cancel or apply) and bye bye daw

The patch remains a possible solution.

ahellquist

2015-03-14 11:28

reporter   ~0016437

@tlat

Correct, I apparently did not test double click to edit. It still crash for me too

ahellquist

2015-03-14 11:30

reporter   ~0016438

It was assigned to me, I am no dev

x42

2015-03-28 12:46

administrator   ~0016506

This is a more fundamental issue with (keyboard) event handling in general.

related issue:

Drag regions to dropzone. While track creation is in progress, press Ctrl-z (undo).
The keyboard request is 'added on top' of the event being currently processed:
backtrace http://pastebin.com/UyNMR0aJ

"on_button_release_event" -> [process mouse button event] then somehow the same thread jumps into key-press handling without finishing the first event.

best guess so far: the issue is in the Item:EventAccumulator.

timbyr

2016-02-22 03:23

developer   ~0017989

I can no longer reproduce this issue with version 4.7.

If there is no feedback in the next week or so to confirm this issue still exists, I will mark it as resolved.

chaot

2016-04-23 16:54

reporter   ~0018158

Because of timbyr's last comment and as I cannot reproduce this here, I'm marking this as resolved.

ahellquist

2019-06-13 08:56

reporter   ~0020673

Tested this in a fairly reasent build and of course this was not an issue. Closing the ticket

ahellquist

2019-06-13 08:57

reporter   ~0020674

Not an issue in resent builds

Issue History

Date Modified Username Field Change
2015-02-03 23:19 ahellquist New Issue
2015-02-04 17:46 paul Note Added: 0016320
2015-02-04 17:46 paul Status new => feedback
2015-03-05 13:24 tlat Note Added: 0016398
2015-03-05 13:25 tlat File Added: drag_segfault.patch
2015-03-05 13:25 tlat File Added: bt.log
2015-03-13 22:51 ahellquist Note Added: 0016427
2015-03-13 22:51 ahellquist Status feedback => resolved
2015-03-13 22:51 ahellquist Resolution open => fixed
2015-03-13 22:51 ahellquist Assigned To => ahellquist
2015-03-14 10:57 tlat Note Added: 0016436
2015-03-14 10:58 tlat Status resolved => feedback
2015-03-14 10:58 tlat Resolution fixed => reopened
2015-03-14 11:28 ahellquist Note Added: 0016437
2015-03-14 11:30 ahellquist Note Added: 0016438
2015-03-14 11:30 ahellquist Status feedback => assigned
2015-03-17 15:41 x42 Assigned To ahellquist =>
2015-03-17 15:41 x42 Status assigned => confirmed
2015-03-28 12:46 x42 Note Added: 0016506
2016-02-22 03:23 timbyr Note Added: 0017989
2016-02-22 03:23 timbyr Status confirmed => feedback
2016-02-22 03:31 timbyr Relationship added related to 0006132
2016-04-23 16:54 chaot Note Added: 0018158
2016-04-23 16:54 chaot Status feedback => resolved
2016-04-23 16:54 chaot Resolution reopened => fixed
2016-04-23 16:54 chaot Assigned To => chaot
2019-06-13 08:56 ahellquist Note Added: 0020673
2019-06-13 08:57 ahellquist Status resolved => closed
2019-06-13 08:57 ahellquist Note Added: 0020674