fix possible crash at session close.
authorRobin Gareus <robin@gareus.org>
Mon, 18 Apr 2016 19:55:50 +0000 (21:55 +0200)
committerRobin Gareus <robin@gareus.org>
Mon, 18 Apr 2016 19:55:50 +0000 (21:55 +0200)
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

index 3bbe34f825b97a31861ae90c5e0e05a9f8e54553..87bac6b8f49beac392913cf55c7ec2a61fdc2798 100644 (file)
@@ -99,6 +99,9 @@ IO::~IO ()
 void
 IO::disconnect_check (boost::shared_ptr<Port> a, boost::shared_ptr<Port> 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,