fix visual focus indication in IOSelector; import pays attention to audio file embedd...
[ardour.git] / libs / ardour / ardour / session_route.h
index f3c8e3f5fbc936fdbf1d096cd02ded52db8503f4..feacc14775a8cc76f80b6cf15b824e29bad412a1 100644 (file)
@@ -23,7 +23,8 @@
 
 #include <iostream>
 
-#include <pbd/lockmonitor.h>
+#include <glibmm/thread.h>
+
 #include <ardour/session.h>
 #include <ardour/route.h>
 
@@ -32,14 +33,10 @@ namespace ARDOUR {
 template<class T> void 
 Session::foreach_route (T *obj, void (T::*func)(Route&))
 {
-       RouteList public_order;
-
-       {
-               RWLockMonitor lm (route_lock, false, __LINE__, __FILE__);
-               public_order = routes;
-       }
-
+       boost::shared_ptr<RouteList> r = routes.reader();
+       RouteList public_order (*r);
        RoutePublicOrderSorter cmp;
+
        public_order.sort (cmp);
 
        for (RouteList::iterator i = public_order.begin(); i != public_order.end(); i++) {
@@ -48,16 +45,12 @@ Session::foreach_route (T *obj, void (T::*func)(Route&))
 }
 
 template<class T> void 
-Session::foreach_route (T *obj, void (T::*func)(Route*))
+Session::foreach_route (T *obj, void (T::*func)(boost::shared_ptr<Route>))
 {
-       RouteList public_order;
-
-       {
-               RWLockMonitor lm (route_lock, false, __LINE__, __FILE__);
-               public_order = routes;
-       }
-
+       boost::shared_ptr<RouteList> r = routes.reader();
+       RouteList public_order (*r);
        RoutePublicOrderSorter cmp;
+
        public_order.sort (cmp);
 
        for (RouteList::iterator i = public_order.begin(); i != public_order.end(); i++) {
@@ -65,18 +58,13 @@ Session::foreach_route (T *obj, void (T::*func)(Route*))
        }
 }
 
-
 template<class T, class A> void 
 Session::foreach_route (T *obj, void (T::*func)(Route&, A), A arg1)
 {
-       RouteList public_order;
-
-       {
-               RWLockMonitor lm (route_lock, false, __LINE__, __FILE__);
-               public_order = routes;
-       }
-
+       boost::shared_ptr<RouteList> r = routes.reader();
+       RouteList public_order (*r);
        RoutePublicOrderSorter cmp;
+
        public_order.sort (cmp);
 
        for (RouteList::iterator i = public_order.begin(); i != public_order.end(); i++) {