[ardour-dev] help wanted to track down a class of bugs

Paul Davis paul at linuxaudiosystems.com
Tue Feb 8 18:08:56 PST 2005


Below is a list of 486 functions. Each of these functions is used to
handle signals emitted by libardour. Every single one of them needs to
have a critical check inserted into it *IF IT IS NOT ALREADY
THERE*. The check ensures that the handler runs in the GUI thread, not
whatever other thread may have raised the signal. This is a vitally
important class of bug that has caused many problems in the past, and
needs a thorough check.

first, the general form of the check:

SomeObject::some_function (...)
{
     if (Gtkmmext::UI::instance()->caller_is_gui_thread()) {
           Gtkmmext::UI::instance()->call_slot (slot (*this, &SomeObject::some_function));
	   return;
     }
}

Probably the simplest thing would be for people to volunteer to take a
chunk of 10-50 functions, and check each one for this kind of test at
the start of the function. If you find any that don't have this check,
email ardour-dev with the list of those that don't. The list should be
formatted just like this one: one function per line.

For the specially virtuous, and if you understand C++, return values
and the use of SigC::bind (...), you could write a patch that added
the check.

If anyone out there can see anyway to make the above check into some
incredibly simple one-liner, shout now!

For the purely brilliant, come up with a tool (perl/python/etc) to
find the functions in each source file, and check it automatically. If
you are going to do this, please say so right away so people don't
start volunteering for the by-hand check.

If you are going to do a range, email ardour-dev with the range you
plan to do. This is a bit chaotic, but with luck we can plough through
this debugging effort very quickly.

And now, the functions:

ARDOUR_UI::update_sample_rate
ARDOUR_UI::engine_halted
ARDOUR_UI::engine_running
ARDOUR_UI::engine_stopped
LibraryTree::added_group
LibraryTree::added_member
LibraryTree::removed_group
LibraryTree::removed_member
SoundFileBox::setup_fields
StreamView::add_crossfade
AudioTimeAxisView::diskstream_changed
MixerStrip::diskstream_changed
StreamView::diskstream_changed
AudioTimeAxisView::map_frozen
MixerStrip::map_frozen
MixerStrip::gain_automation_style_changed
MixerStrip::pan_automation_style_changed
MixerStrip::gain_automation_state_changed
MixerStrip::pan_automation_state_changed
ImageFrameSocketHandler::send_imageframe_time_axis_renamed
ImageFrameSocketHandler::send_marker_time_axis_renamed
ImageFrameSocketHandler::send_imageframe_time_axis_group_renamed
StreamView::remove_crossfade
ARDOUR_UI::disk_overrun_message_gone
ARDOUR_UI::disk_underrun_message_gone
AutomationTimeAxisView::remove_ghost
Editor::remove_route
Editor::remove_route
Editor::cms_deleted
Editor::cms_deleted
Editor::current_mixer_strip_removed
Editor::cms_deleted
Editor::remove_route
ImageFrameTimeAxis::remove_time_axis_view
ImageFrameTimeAxisGroup::remove_imageframe_item
ImageFrameTimeAxisView::remove_imageframe_group
ImageFrameView::remove_marker_view_item
PortInsertWindow::plugin_going_away
Keyboard::set_current_dialog
MarkerTimeAxisView::remove_marker_view
MeterBridge::remove_route
Mixer_UI::remove_strip
PluginUIWindow::plugin_going_away
AudioRegionView::remove_ghost
RouteParams_UI::route_removed
RouteParams_UI::redirect_going_away
RouteParams_UI::redirect_going_away
RouteParams_UI::plugin_going_away
RouteParams_UI::plugin_going_away
RouteParams_UI::redirect_going_away
RouteParams_UI::redirect_going_away
RouteUI::route_removed
SendUIWindow::send_going_away
StreamView::remove_region_view
StreamView::remove_rec_region
RouteUI::route_rec_enable_changed
StreamView::rec_enable_changed
AudioTimeAxisView::speed_changed
MixerStrip::speed_changed
StreamView::playlist_changed
IOSelector::port_configuration_changed
MixerStrip::input_changed
IOSelector::port_configuration_changed
MixerStrip::output_changed
SendUI::output_configuration_changed
IOSelector::port_connections_changed
MixerStrip::input_changed
IOSelector::port_connections_changed
MixerStrip::output_changed
GainMeter::gain_changed
AudioTimeAxisView::route_name_changed
Editor::location_changed
IOSelector::name_changed
LocationEditRow::name_changed
RouteUI::name_changed
Mixer_UI::strip_name_changed
RedirectBox::show_redirect_name
RouteParams_UI::route_name_changed
AudioTimeAxisView::route_name_changed
Editor::location_changed
IOSelector::name_changed
LocationEditRow::name_changed
RouteUI::name_changed
Mixer_UI::strip_name_changed
RedirectBox::show_redirect_name
RouteParams_UI::route_name_changed
Editor::location_changed
LocationEditRow::end_changed
Editor::location_changed
LocationEditRow::start_changed
Editor::group_flags_changed
Editor::location_flags_changed
LocationEditRow::flags_changed
Mixer_UI::group_flags_changed
Editor::refresh_location_display
Editor::end_location_changed
Editor::location_changed
LocationEditRow::isrc_entry_changed
LocationEditRow::performer_entry_changed
LocationEditRow::composer_entry_changed
LocationEditRow::name_entry_changed
LocationEditRow::location_changed
LocationUI::refresh_location_list
MixerStrip::comment_edited
AudioRegionEditor::name_entry_changed
LocationUI::current_location_changed
Editor::refresh_location_display
Editor::end_location_changed
Editor::location_changed
LocationEditRow::isrc_entry_changed
LocationEditRow::performer_entry_changed
LocationEditRow::composer_entry_changed
LocationEditRow::name_entry_changed
LocationEditRow::location_changed
LocationUI::refresh_location_list
MixerStrip::comment_edited
AudioRegionEditor::name_entry_changed
Editor::add_new_location
LocationUI::location_added
Editor::location_gone
LocationUI::location_removed
AudioTimeAxisView::update_pans
MixerStrip::connect_to_pan
PannerUI::panner_changed
PannerUI::pan_value_changed
AudioTimeAxisView::playlist_state_changed
AutomationLine::list_changed
CrossfadeEditor::xfade_changed
CrossfadeView::crossfade_changed
Editor::tempo_map_changed
Editor::refresh_location_display_s
LocationUI::refresh_location_list_s
Panner2d::handle_state_change
PannerUI::update_pan_state
AudioRegionEditor::region_changed
AudioRegionView::region_changed
StreamView::playlist_state_changed
AudioTimeAxisView::update_pans
MixerStrip::connect_to_pan
PannerUI::panner_changed
PannerUI::pan_value_changed
PannerUI::update_pan_linkage
AudioTimeAxisView::playlist_state_changed
AutomationLine::list_changed
CrossfadeEditor::xfade_changed
CrossfadeView::crossfade_changed
Editor::tempo_map_changed
Editor::refresh_location_display_s
LocationUI::refresh_location_list_s
Panner2d::handle_state_change
PannerUI::update_pan_state
AudioRegionEditor::region_changed
AudioRegionView::region_changed
StreamView::playlist_state_changed
StreamView::add_region_view
StreamView::remove_region_view
AudioTimeAxisView::playlist_modified
StreamView::playlist_modified
ImageFrameSocketHandler::send_imageframe_time_axis_renamed
ImageFrameSocketHandler::send_marker_time_axis_renamed
ImageFrameSocketHandler::send_imageframe_time_axis_group_renamed
ARDOUR_UI::disk_overrun_message_gone
ARDOUR_UI::disk_underrun_message_gone
AutomationTimeAxisView::remove_ghost
Editor::remove_route
Editor::remove_route
Editor::cms_deleted
Editor::cms_deleted
Editor::current_mixer_strip_removed
Editor::cms_deleted
Editor::remove_route
ImageFrameTimeAxis::remove_time_axis_view
ImageFrameTimeAxisGroup::remove_imageframe_item
ImageFrameTimeAxisView::remove_imageframe_group
ImageFrameView::remove_marker_view_item
PortInsertWindow::plugin_going_away
Keyboard::set_current_dialog
MarkerTimeAxisView::remove_marker_view
MeterBridge::remove_route
Mixer_UI::remove_strip
PluginUIWindow::plugin_going_away
AudioRegionView::remove_ghost
RouteParams_UI::route_removed
RouteParams_UI::redirect_going_away
RouteParams_UI::redirect_going_away
RouteParams_UI::plugin_going_away
RouteParams_UI::plugin_going_away
RouteParams_UI::redirect_going_away
RouteParams_UI::redirect_going_away
RouteUI::route_removed
SendUIWindow::send_going_away
StreamView::remove_region_view
StreamView::remove_rec_region
PluginUI::parameter_changed
PluginUI::parameter_changed
PluginUI::parameter_changed
ARDOUR_UI::disk_overrun_message_gone
ARDOUR_UI::disk_underrun_message_gone
AutomationTimeAxisView::remove_ghost
Editor::remove_route
Editor::remove_route
Editor::cms_deleted
Editor::cms_deleted
Editor::current_mixer_strip_removed
Editor::cms_deleted
Editor::remove_route
ImageFrameTimeAxis::remove_time_axis_view
ImageFrameTimeAxisGroup::remove_imageframe_item
ImageFrameTimeAxisView::remove_imageframe_group
ImageFrameView::remove_marker_view_item
PortInsertWindow::plugin_going_away
Keyboard::set_current_dialog
MarkerTimeAxisView::remove_marker_view
MeterBridge::remove_route
Mixer_UI::remove_strip
PluginUIWindow::plugin_going_away
AudioRegionView::remove_ghost
RouteParams_UI::route_removed
RouteParams_UI::redirect_going_away
RouteParams_UI::redirect_going_away
RouteParams_UI::plugin_going_away
RouteParams_UI::plugin_going_away
RouteParams_UI::redirect_going_away
RouteParams_UI::redirect_going_away
RouteUI::route_removed
SendUIWindow::send_going_away
StreamView::remove_region_view
StreamView::remove_rec_region
PluginUI::redirect_active_changed
RedirectBox::show_redirect_active
RedirectBox::show_redirect_active
RedirectBox::show_redirect_active
RouteUI::route_active_changed
ARDOUR_UI::disk_overrun_message_gone
ARDOUR_UI::disk_underrun_message_gone
AutomationTimeAxisView::remove_ghost
Editor::remove_route
Editor::remove_route
Editor::cms_deleted
Editor::cms_deleted
Editor::current_mixer_strip_removed
Editor::cms_deleted
Editor::remove_route
ImageFrameTimeAxis::remove_time_axis_view
ImageFrameTimeAxisGroup::remove_imageframe_item
ImageFrameTimeAxisView::remove_imageframe_group
ImageFrameView::remove_marker_view_item
PortInsertWindow::plugin_going_away
Keyboard::set_current_dialog
MarkerTimeAxisView::remove_marker_view
MeterBridge::remove_route
Mixer_UI::remove_strip
PluginUIWindow::plugin_going_away
AudioRegionView::remove_ghost
RouteParams_UI::route_removed
RouteParams_UI::redirect_going_away
RouteParams_UI::redirect_going_away
RouteParams_UI::plugin_going_away
RouteParams_UI::plugin_going_away
RouteParams_UI::redirect_going_away
RouteParams_UI::redirect_going_away
RouteUI::route_removed
SendUIWindow::send_going_away
StreamView::remove_region_view
StreamView::remove_rec_region
ARDOUR_UI::disk_overrun_message_gone
ARDOUR_UI::disk_underrun_message_gone
AutomationTimeAxisView::remove_ghost
Editor::remove_route
Editor::remove_route
Editor::cms_deleted
Editor::cms_deleted
Editor::current_mixer_strip_removed
Editor::cms_deleted
Editor::remove_route
ImageFrameTimeAxis::remove_time_axis_view
ImageFrameTimeAxisGroup::remove_imageframe_item
ImageFrameTimeAxisView::remove_imageframe_group
ImageFrameView::remove_marker_view_item
PortInsertWindow::plugin_going_away
Keyboard::set_current_dialog
MarkerTimeAxisView::remove_marker_view
MeterBridge::remove_route
Mixer_UI::remove_strip
PluginUIWindow::plugin_going_away
AudioRegionView::remove_ghost
RouteParams_UI::route_removed
RouteParams_UI::redirect_going_away
RouteParams_UI::redirect_going_away
RouteParams_UI::plugin_going_away
RouteParams_UI::plugin_going_away
RouteParams_UI::redirect_going_away
RouteParams_UI::redirect_going_away
RouteUI::route_removed
SendUIWindow::send_going_away
StreamView::remove_region_view
StreamView::remove_rec_region
Editor::refresh_location_display
Editor::end_location_changed
Editor::location_changed
LocationEditRow::isrc_entry_changed
LocationEditRow::performer_entry_changed
LocationEditRow::composer_entry_changed
LocationEditRow::name_entry_changed
LocationEditRow::location_changed
LocationUI::refresh_location_list
MixerStrip::comment_edited
AudioRegionEditor::name_entry_changed
Editor::group_flags_changed
Editor::location_flags_changed
LocationEditRow::flags_changed
Mixer_UI::group_flags_changed
RouteUI::solo_changed
RouteUI::solo_changed
RouteUI::solo_changed
RouteUI::solo_changed
RouteUI::solo_changed
RouteUI::solo_safe_toggle
MixerStrip::comment_changed
RouteUI::mute_changed
RouteUI::mute_changed
RouteUI::mute_changed
RouteUI::pre_fader_toggle
RouteUI::post_fader_toggle
RouteUI::control_outs_toggle
RouteUI::main_outs_toggle
AudioTimeAxisView::redirects_changed
RedirectBox::redirects_changed
RouteParams_UI::redirects_changed
RouteUI::route_rec_enable_changed
StreamView::rec_enable_changed
MixerStrip::mix_group_changed
PluginUI::redirect_active_changed
RedirectBox::show_redirect_active
RedirectBox::show_redirect_active
RedirectBox::show_redirect_active
RouteUI::route_active_changed
GainMeter::meter_changed
ARDOUR_UI::disk_overrun_message_gone
ARDOUR_UI::disk_underrun_message_gone
AutomationTimeAxisView::remove_ghost
Editor::remove_route
Editor::remove_route
Editor::cms_deleted
Editor::cms_deleted
Editor::current_mixer_strip_removed
Editor::cms_deleted
Editor::remove_route
ImageFrameTimeAxis::remove_time_axis_view
ImageFrameTimeAxisGroup::remove_imageframe_item
ImageFrameTimeAxisView::remove_imageframe_group
ImageFrameView::remove_marker_view_item
PortInsertWindow::plugin_going_away
Keyboard::set_current_dialog
MarkerTimeAxisView::remove_marker_view
MeterBridge::remove_route
Mixer_UI::remove_strip
PluginUIWindow::plugin_going_away
AudioRegionView::remove_ghost
RouteParams_UI::route_removed
RouteParams_UI::redirect_going_away
RouteParams_UI::redirect_going_away
RouteParams_UI::plugin_going_away
RouteParams_UI::plugin_going_away
RouteParams_UI::redirect_going_away
RouteParams_UI::redirect_going_away
RouteUI::route_removed
SendUIWindow::send_going_away
StreamView::remove_region_view
StreamView::remove_rec_region
Editor::handle_gui_changes
Editor::handle_gui_changes
MixerStrip::route_gui_changed
Editor::update_title
Editor::session_going_away
Window::hide_all
LocationUI::session_gone
ArdourDialog::session_gone
MeterBridge::session_gone
MeterBridge::session_gone
Mixer_UI::disconnect_from_session
PlaylistSelector::set_session
PluginSelector::set_session
ArdourDialog::session_gone
Editor::region_hidden
RouteUI::session_rec_enable_changed
StreamView::sess_rec_enable_changed
RouteUI::session_rec_enable_changed
StreamView::sess_rec_enable_changed
ARDOUR_UI::queue_transport_change
Editor::map_transport_state
StreamView::transport_changed
Editor::map_position_change
ImageFrameSocketHandler::send_imageframe_view_position_change
Editor::fake_handle_new_duration
ImageFrameSocketHandler::send_imageframe_view_duration_change
ARDOUR_UI::halt_on_xrun_message
Editor::fake_handle_new_route
MeterBridge::add_route
Mixer_UI::add_strip
RouteParams_UI::add_route
ARDOUR_UI::diskstream_added
ARDOUR_UI::queue_map_control_change
Editor::queue_session_control_changed
OptionEditor::queue_session_control_changed
Editor::update_title_s
Mixer_UI::session_state_saved
Editor::fake_add_edit_group
Mixer_UI::add_mix_group
GainMeter::meter_hold_changed
Editor::update_just_smpte
Editor::update_just_smpte
Editor::fake_handle_new_audio_region
Editor::fake_handle_audio_region_removed
Editor::playlist_deletion_dialog
Editor::handle_new_named_selection
Editor::handle_new_named_selection
ARDOUR_UI::auditioning_changed
CrossfadeEditor::audition_state_changed
SoundFileBox::audition_status_changed
ARDOUR_UI::soloing_changed
ConnectionEditor::proxy_add_connection_and_select
ConnectionEditor::proxy_remove_connection
ARDOUR_UI::disk_overrun_message_gone
ARDOUR_UI::disk_underrun_message_gone
AutomationTimeAxisView::remove_ghost
Editor::remove_route
Editor::remove_route
Editor::cms_deleted
Editor::cms_deleted
Editor::current_mixer_strip_removed
Editor::cms_deleted
Editor::remove_route
ImageFrameTimeAxis::remove_time_axis_view
ImageFrameTimeAxisGroup::remove_imageframe_item
ImageFrameTimeAxisView::remove_imageframe_group
ImageFrameView::remove_marker_view_item
PortInsertWindow::plugin_going_away
Keyboard::set_current_dialog
MarkerTimeAxisView::remove_marker_view
MeterBridge::remove_route
Mixer_UI::remove_strip
PluginUIWindow::plugin_going_away
AudioRegionView::remove_ghost
RouteParams_UI::route_removed
RouteParams_UI::redirect_going_away
RouteParams_UI::redirect_going_away
RouteParams_UI::plugin_going_away
RouteParams_UI::plugin_going_away
RouteParams_UI::redirect_going_away
RouteParams_UI::redirect_going_away
RouteUI::route_removed
SendUIWindow::send_going_away
StreamView::remove_region_view
StreamView::remove_rec_region
StreamView::rec_peak_range_ready
AudioTimeAxisView::playlist_state_changed
AutomationLine::list_changed
CrossfadeEditor::xfade_changed
CrossfadeView::crossfade_changed
Editor::tempo_map_changed
Editor::refresh_location_display_s
LocationUI::refresh_location_list_s
Panner2d::handle_state_change
PannerUI::update_pan_state
AudioRegionEditor::region_changed
AudioRegionView::region_changed
StreamView::playlist_state_changed




More information about the Ardour-Dev mailing list