- b.signal_reserved.connect(sigc::bind<0>(signal_block_reserved, sigc::ref(b)));
- signal_track_chain_added.emit(b);
+ sigc::connection conn = b.signal_reserved.connect(sigc::bind<0>(signal_block_reserved, sigc::ref(b)));
+ try
+ {
+ signal_track_chain_added.emit(b);
+ }
+ catch(...)
+ {
+ track_chains.erase(b);
+ conn.disconnect();
+ throw;
+ }