From 54c085d9314a8aab65b1cd53cf194249a66bf75c Mon Sep 17 00:00:00 2001 From: David Robillard Date: Mon, 29 Dec 2014 22:01:41 -0500 Subject: Fix occasional crash when saving MIDI. I can't figure out why a change has a NULL note; that shouldn't happen, but it does. Worse case scenario is some undo loss, so better to print something informative and soldier on than crash. Hopefully this will help track down the real cause with more testing. --- libs/ardour/midi_model.cc | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'libs/ardour/midi_model.cc') diff --git a/libs/ardour/midi_model.cc b/libs/ardour/midi_model.cc index c9c71e7db9..7f8a38454a 100644 --- a/libs/ardour/midi_model.cc +++ b/libs/ardour/midi_model.cc @@ -582,8 +582,16 @@ MidiModel::NoteDiffCommand::marshal_change (const NoteChange& change) } ostringstream id_str; - id_str << change.note->id(); - xml_change->add_property ("id", id_str.str()); + if (change.note) { + id_str << change.note->id(); + xml_change->add_property ("id", id_str.str()); + } else if (change.note_id) { + warning << _("Change has no note, using note ID") << endmsg; + id_str << change.note_id; + xml_change->add_property ("id", id_str.str()); + } else { + error << _("Change has no note or note ID") << endmsg; + } return *xml_change; } @@ -593,6 +601,7 @@ MidiModel::NoteDiffCommand::unmarshal_change (XMLNode *xml_change) { XMLProperty* prop; NoteChange change; + change.note_id = 0; if ((prop = xml_change->property("property")) != 0) { change.property = (Property) string_2_enum (prop->value(), change.property); -- cgit v1.2.3