View Issue Details

IDProjectCategoryView StatusLast Update
0001985ardourbugspublic2020-04-19 20:12
Reportertimbyr Assigned Tocth103  
PriorityhighSeveritymajorReproducibilityalways
Status closedResolutionfixed 
Summary0001985: Cannot reopen session because jack ports are not unregistered on session close
DescriptionThis bug was reproduced using trunk@2714 but as far as I can tell was introduced in commit 2556:

virtualize Port object; clean up automation tracks from track deletion

To reproduce:

1. Create a new session
2. Save session.
3. Close session. notice all ports are still registered.
4. Try and reopen same or different session.
5. Session does not load and log window contains:

[ERROR]: JACK: cannot deliver port registration request
[ERROR]: Unable to create all required ports
[ERROR]: Session "/home/timbyr/Sessions/aaa/ (snapshot aaa)" did not load successfully
TagsNo tags attached.

Activities

timbyr

2007-12-14 22:51

developer   ~0004604

Output of svn log surrounding the introduction of the bug

------------------------------------------------------------------------
r2558 | drobilla | 2007-10-17 13:09:38 +1000 (Wed, 17 Oct 2007) | 2 lines

Fix compilation.

------------------------------------------------------------------------
r2557 | paul | 2007-10-17 12:09:24 +1000 (Wed, 17 Oct 2007) | 1 line

added file
------------------------------------------------------------------------
r2556 | paul | 2007-10-17 07:01:12 +1000 (Wed, 17 Oct 2007) | 1 line

virtualize Port object; clean up automation tracks from track deletion

hansfbaier

2008-03-18 07:06

reporter   ~0004789

drobilla: How about my fix for that issue (see mail to ardour-dev)?

2008-03-19 04:08

 

bugfix_open_ports_on_session_close.diff (2,404 bytes)   
Index: libs/ardour/audioengine.cc
===================================================================
--- libs/ardour/audioengine.cc	(Revision 3155)
+++ libs/ardour/audioengine.cc	(Arbeitskopie)
@@ -527,7 +527,7 @@
 		session = 0;
 	}
 	
-	remove_all_ports ();
+	//remove_all_ports ();
 }
 
 void
@@ -555,6 +555,7 @@
 {
 	Port* newport = 0;
 
+	cerr << "trying to register port with name " << portname << endl;
 	try {
 		if (dtype == DataType::AUDIO) {
 			newport = new AudioPort (portname, (input ? Port::IsInput : Port::IsOutput), publish, frames_per_cycle());
@@ -564,11 +565,17 @@
 			throw unknown_type();
 		}
 
+		cerr << "successfully got port " << portname << " with address " << newport << endl;
+
 		RCUWriter<Ports> writer (ports);
 		boost::shared_ptr<Ports> ps = writer.get_copy ();
+		cerr << "Address of ports list: " << ps << endl
+		     << "Ports set size before insert: " << ps->size() << endl;
 		ps->insert (ps->begin(), newport);
+		cerr << "Ports set size after insert: " << ps->size() << endl;
 		/* writer goes out of scope, forces update */
 
+
 		return newport;
 	}
 
@@ -608,22 +615,31 @@
 {
 	/* caller must hold process lock */
 
+	cerr << "about to unregister Port xx  x" << &port << "\n";
+
 	if (!_running) { 
 		/* probably happening when the engine has been halted by JACK,
 		   in which case, there is nothing we can do here.
 		   */
+		cerr << "not running\n";
 		return 0;
 	}
 
 	{
+		cerr << "before getcopy\n";
 		
 		RCUWriter<Ports> writer (ports);
 		boost::shared_ptr<Ports> ps = writer.get_copy ();
 		
+		cerr << "Ports set size: " << ps.get()->size() << endl;
+
 		for (Ports::iterator i = ps->begin(); i != ps->end(); ++i) {
+			cerr << "before delete" << endl;
 			if ((*i) == &port) {
+				cerr << "About to delete " << &port << endl;
 				delete *i;
 				ps->erase (i);
+				cerr << "After erasing ports size: " << ps->size();
 				break;
 			}
 		}
@@ -631,6 +647,7 @@
 		/* writer goes out of scope, forces update */
 	}
 		
+	cerr << "before remove_connections\n";
 	remove_connections_for (port);
 
 	return 0;
Index: libs/ardour/io.cc
===================================================================
--- libs/ardour/io.cc	(Revision 3155)
+++ libs/ardour/io.cc	(Arbeitskopie)
@@ -202,6 +202,7 @@
 
 IO::~IO ()
 {
+	cerr << "In destructor of IO" << endl;
 	Glib::Mutex::Lock guard (m_meter_signal_lock);
 	Glib::Mutex::Lock lm (io_lock);
 

hansfbaier

2008-03-19 04:10

reporter   ~0004790

las, drobilla:
This bugfix isnt meant to be applied directly,
rather it spots the error location
and inserts some debugging output.
After I applied it, it worked fine.
(All the ports are deregistered correctly
and opening new sessions works fine)

paul

2008-03-21 13:22

administrator   ~0004793

this was applied and committed, yes?

hansfbaier

2008-03-24 01:43

reporter   ~0004806

No, not yet......
Drobilla said, there was a deeper problem to it,
which I dont know about.

seablade

2009-07-05 01:43

manager   ~0006278

What is the current status on this bug? Does it still apply to 2.8 or newer?

cth103

2009-09-02 22:59

administrator   ~0006631

This is fixed in 3.0 revision 5621.

system

2020-04-19 20:12

developer   ~0021591

Issue has been closed automatically, by Trigger Close Plugin.
Feel free to re-open with additional information if you think the issue is not resolved.

Issue History

Date Modified Username Field Change
2007-12-09 12:35 timbyr New Issue
2007-12-14 22:51 timbyr Note Added: 0004604
2008-03-18 07:06 hansfbaier Note Added: 0004789
2008-03-19 04:08 hansfbaier File Added: bugfix_open_ports_on_session_close.diff
2008-03-19 04:10 hansfbaier Note Added: 0004790
2008-03-21 13:22 paul Note Added: 0004793
2008-03-21 13:22 paul Status new => feedback
2008-03-24 01:43 hansfbaier Note Added: 0004806
2009-07-05 01:43 seablade Note Added: 0006278
2009-07-05 01:43 seablade Description Updated
2009-09-02 22:59 cth103 cost => 0.00
2009-09-02 22:59 cth103 Note Added: 0006631
2009-09-02 22:59 cth103 Status feedback => resolved
2009-09-02 22:59 cth103 Resolution open => fixed
2009-09-02 22:59 cth103 Assigned To => cth103
2020-04-19 20:12 system Note Added: 0021591
2020-04-19 20:12 system Status resolved => closed