Revert "Protect playlist with a mutex so that we can add content safely from e.g...
authorCarl Hetherington <cth@carlh.net>
Wed, 14 Aug 2013 14:11:30 +0000 (15:11 +0100)
committerCarl Hetherington <cth@carlh.net>
Wed, 14 Aug 2013 14:11:30 +0000 (15:11 +0100)
This reverts commit 853b8641ee7fb8348302c0daae838c4891769b1d.

src/lib/film.cc
src/lib/playlist.cc
src/lib/playlist.h

index d5ce7fd0caee839e10e0177224673cbb3f12917d..2f7e0787323210d93297ae36a3248512dfc619ba 100644 (file)
@@ -801,7 +801,6 @@ Film::maybe_add_content (weak_ptr<Job> j, weak_ptr<Content> c)
        }
 }
 
-/** Thread-safe; handled by playlist */
 void
 Film::add_content (shared_ptr<Content> c)
 {
index 8952f00be64b1c106a019ef22959d44852fa13df..de48ff5f5cd0d49bb31a2691a437c4f825eddf38 100644 (file)
@@ -75,8 +75,6 @@ Playlist::content_changed (weak_ptr<Content> content, int property, bool frequen
 void
 Playlist::maybe_sequence_video ()
 {
-       boost::mutex::scoped_lock lm (_mutex);
-       
        if (!_sequence_video || _sequencing_video) {
                return;
        }
@@ -101,8 +99,6 @@ Playlist::maybe_sequence_video ()
 string
 Playlist::video_identifier () const
 {
-       boost::mutex::scoped_lock lm (_mutex);
-       
        string t;
        
        for (ContentList::const_iterator i = _content.begin(); i != _content.end(); ++i) {
@@ -119,8 +115,6 @@ Playlist::video_identifier () const
 void
 Playlist::set_from_xml (shared_ptr<const Film> film, shared_ptr<const cxml::Node> node)
 {
-       boost::mutex::scoped_lock lm (_mutex);
-       
        list<shared_ptr<cxml::Node> > c = node->node_children ("Content");
        for (list<shared_ptr<cxml::Node> >::iterator i = c.begin(); i != c.end(); ++i) {
                _content.push_back (content_factory (film, *i));
@@ -133,8 +127,6 @@ Playlist::set_from_xml (shared_ptr<const Film> film, shared_ptr<const cxml::Node
 void
 Playlist::as_xml (xmlpp::Node* node)
 {
-       boost::mutex::scoped_lock lm (_mutex);
-       
        for (ContentList::iterator i = _content.begin(); i != _content.end(); ++i) {
                (*i)->as_xml (node->add_child ("Content"));
        }
@@ -143,35 +135,21 @@ Playlist::as_xml (xmlpp::Node* node)
 void
 Playlist::add (shared_ptr<Content> c)
 {
-       {
-               boost::mutex::scoped_lock lm (_mutex);
-               _content.push_back (c);
-               reconnect ();
-       }
-       
+       _content.push_back (c);
+       reconnect ();
        Changed ();
 }
 
 void
 Playlist::remove (shared_ptr<Content> c)
 {
-       bool changed = false;
-       
-       {
-               boost::mutex::scoped_lock lm (_mutex);
-               ContentList::iterator i = _content.begin ();
-               while (i != _content.end() && *i != c) {
-                       ++i;
-               }
-               
-               if (i != _content.end ()) {
-                       _content.erase (i);
-                       reconnect ();
-                       changed = true;
-               }
+       ContentList::iterator i = _content.begin ();
+       while (i != _content.end() && *i != c) {
+               ++i;
        }
-
-       if (changed) {
+       
+       if (i != _content.end ()) {
+               _content.erase (i);
                Changed ();
        }
 }
@@ -179,37 +157,23 @@ Playlist::remove (shared_ptr<Content> c)
 void
 Playlist::remove (ContentList c)
 {
-       bool changed = false;
-
-       {
-               boost::mutex::scoped_lock lm (_mutex);
-               for (ContentList::iterator i = c.begin(); i != c.end(); ++i) {
-                       ContentList::iterator j = _content.begin ();
-                       while (j != _content.end() && *j != *i) {
-                               ++j;
-                       }
-                       
-                       if (j != _content.end ()) {
-                               _content.erase (j);
-                               changed = true;
-                       }
+       for (ContentList::iterator i = c.begin(); i != c.end(); ++i) {
+               ContentList::iterator j = _content.begin ();
+               while (j != _content.end() && *j != *i) {
+                       ++j;
                }
-
-               if (changed) {
-                       reconnect ();
+       
+               if (j != _content.end ()) {
+                       _content.erase (j);
                }
        }
 
-       if (changed) {
-               Changed ();
-       }
+       Changed ();
 }
 
 bool
 Playlist::has_subtitles () const
 {
-       boost::mutex::scoped_lock lm (_mutex);
-       
        for (ContentList::const_iterator i = _content.begin(); i != _content.end(); ++i) {
                shared_ptr<const FFmpegContent> fc = dynamic_pointer_cast<FFmpegContent> (*i);
                if (fc && !fc->subtitle_streams().empty()) {
@@ -235,8 +199,6 @@ public:
 int
 Playlist::best_dcp_frame_rate () const
 {
-       boost::mutex::scoped_lock lm (_mutex);
-       
        list<int> const allowed_dcp_frame_rates = Config::instance()->allowed_dcp_frame_rates ();
 
        /* Work out what rates we could manage, including those achieved by using skip / repeat. */
@@ -288,8 +250,6 @@ Playlist::best_dcp_frame_rate () const
 Time
 Playlist::length () const
 {
-       boost::mutex::scoped_lock lm (_mutex);
-       
        Time len = 0;
        for (ContentList::const_iterator i = _content.begin(); i != _content.end(); ++i) {
                len = max (len, (*i)->end ());
@@ -298,7 +258,6 @@ Playlist::length () const
        return len;
 }
 
-/* Caller must hold a lock on _mutex */
 void
 Playlist::reconnect ()
 {
@@ -316,8 +275,6 @@ Playlist::reconnect ()
 Time
 Playlist::video_end () const
 {
-       boost::mutex::scoped_lock lm (_mutex);
-       
        Time end = 0;
        for (ContentList::const_iterator i = _content.begin(); i != _content.end(); ++i) {
                if (dynamic_pointer_cast<const VideoContent> (*i)) {
@@ -331,7 +288,6 @@ Playlist::video_end () const
 void
 Playlist::set_sequence_video (bool s)
 {
-       boost::mutex::scoped_lock lm (_mutex);
        _sequence_video = s;
 }
 
@@ -345,35 +301,30 @@ ContentSorter::operator() (shared_ptr<Content> a, shared_ptr<Content> b)
 ContentList
 Playlist::content () const
 {
-       boost::mutex::scoped_lock lm (_mutex);
        return _content;
 }
 
 void
 Playlist::repeat (ContentList c, int n)
 {
-       {
-               boost::mutex::scoped_lock lm (_mutex);
-               pair<Time, Time> range (TIME_MAX, 0);
+       pair<Time, Time> range (TIME_MAX, 0);
+       for (ContentList::iterator i = c.begin(); i != c.end(); ++i) {
+               range.first = min (range.first, (*i)->position ());
+               range.second = max (range.second, (*i)->position ());
+               range.first = min (range.first, (*i)->end ());
+               range.second = max (range.second, (*i)->end ());
+       }
+
+       Time pos = range.second;
+       for (int i = 0; i < n; ++i) {
                for (ContentList::iterator i = c.begin(); i != c.end(); ++i) {
-                       range.first = min (range.first, (*i)->position ());
-                       range.second = max (range.second, (*i)->position ());
-                       range.first = min (range.first, (*i)->end ());
-                       range.second = max (range.second, (*i)->end ());
-               }
-               
-               Time pos = range.second;
-               for (int i = 0; i < n; ++i) {
-                       for (ContentList::iterator i = c.begin(); i != c.end(); ++i) {
-                               shared_ptr<Content> copy = (*i)->clone ();
-                               copy->set_position (pos + copy->position() - range.first);
-                               _content.push_back (copy);
-                       }
-                       pos += range.second - range.first;
+                       shared_ptr<Content> copy = (*i)->clone ();
+                       copy->set_position (pos + copy->position() - range.first);
+                       _content.push_back (copy);
                }
-               
-               reconnect ();
+               pos += range.second - range.first;
        }
-       
+
+       reconnect ();
        Changed ();
 }
index cd902d223d0f0944f5fd550f60805d2f8546dc12..7dbf416041d8bf4bfa555bf45341ee01e04af812 100644 (file)
@@ -90,7 +90,6 @@ private:
        bool _sequence_video;
        bool _sequencing_video;
        std::list<boost::signals2::connection> _content_connections;
-       mutable boost::mutex _mutex;
 };
 
 #endif