From 26532364bbd2e591f9dcc2a28b0eb22a88a90472 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Mon, 18 Apr 2016 21:55:50 +0200 Subject: [PATCH] fix possible crash at session close. In the wake of 81faa3b420303eec2ca0e3. Disconnect Signal from process callback, may notify an IO that just reached a zero shared ptr refcount due to route-deletion (GUI thread) resulting in a double free. --- libs/ardour/io.cc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/libs/ardour/io.cc b/libs/ardour/io.cc index 3bbe34f825..87bac6b8f4 100644 --- a/libs/ardour/io.cc +++ b/libs/ardour/io.cc @@ -99,6 +99,9 @@ IO::~IO () void IO::disconnect_check (boost::shared_ptr a, boost::shared_ptr b) { + if (_session.state_of_the_state () & Session::Deletion) { + return; + } /* this could be called from within our own ::disconnect() method(s) or from somewhere that operates directly on a port. so, we don't know for sure if we can take this lock or not. if we fail,