This AtomicityChecker was introduced a long time ago for reasons
authorCarl Hetherington <cth@carlh.net>
Thu, 4 Jun 2020 23:18:46 +0000 (01:18 +0200)
committerCarl Hetherington <cth@carlh.net>
Thu, 4 Jun 2020 23:18:46 +0000 (01:18 +0200)
that are unclear.

This commit removes it because it was causing a bug whereby the
_suspended count on Butler would not go back down to 0 due to signals
being blocked by the AtomicityChecker.

I can see two possibilities:

1. AtomicityChecker is a band-aid for some deeper problem, in which
case other bugs will become apparent.  Perhaps it relates to signals
being sent before the butler/player/playlist are connected to content.

2. AtomicityChecker was correct but was not identifiying signals
from different pieces of content correctly; so the correct fix would
be to add the content pointer to the _checker.send() call and block
based also on that.

src/lib/atomicity_checker.cc [deleted file]
src/lib/atomicity_checker.h [deleted file]
src/lib/playlist.cc
src/lib/playlist.h
src/lib/wscript

diff --git a/src/lib/atomicity_checker.cc b/src/lib/atomicity_checker.cc
deleted file mode 100644 (file)
index 922aa15..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
-    Copyright (C) 2018 Carl Hetherington <cth@carlh.net>
-
-    This file is part of DCP-o-matic.
-
-    DCP-o-matic is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    DCP-o-matic is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with DCP-o-matic.  If not, see <http://www.gnu.org/licenses/>.
-
-*/
-
-#include "atomicity_checker.h"
-#include "types.h"
-
-/** @return true if this change should be ignored */
-bool
-AtomicityChecker::send (ChangeType type, int property)
-{
-       boost::mutex::scoped_lock lm (_mutex);
-       switch (type) {
-       case CHANGE_TYPE_PENDING:
-               _await.insert (property);
-               return false;
-       case CHANGE_TYPE_DONE:
-       case CHANGE_TYPE_CANCELLED:
-               if (_await.find(property) != _await.end()) {
-                       _await.erase (property);
-                       return false;
-               }
-               return true;
-       }
-
-       return false;
-}
diff --git a/src/lib/atomicity_checker.h b/src/lib/atomicity_checker.h
deleted file mode 100644 (file)
index 5a47235..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
-    Copyright (C) 2018 Carl Hetherington <cth@carlh.net>
-
-    This file is part of DCP-o-matic.
-
-    DCP-o-matic is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    DCP-o-matic is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with DCP-o-matic.  If not, see <http://www.gnu.org/licenses/>.
-
-*/
-
-#include "types.h"
-#include <boost/thread/mutex.hpp>
-#include <set>
-
-class AtomicityChecker
-{
-public:
-       bool send (ChangeType type, int property);
-
-private:
-       boost::mutex _mutex;
-       std::set<int> _await;
-};
index 48053bbf485aa893ddd903646ee911baaba05bdc..b96b0fbe0edf48a809ba93f89c28e87de56a5b08 100644 (file)
@@ -70,13 +70,6 @@ Playlist::~Playlist ()
 void
 Playlist::content_change (weak_ptr<const Film> weak_film, ChangeType type, weak_ptr<Content> content, int property, bool frequent)
 {
 void
 Playlist::content_change (weak_ptr<const Film> weak_film, ChangeType type, weak_ptr<Content> content, int property, bool frequent)
 {
-       /* Make sure we only hear about atomic changes (e.g. a PENDING always with the DONE/CANCELLED)
-          Ignore any DONE/CANCELLED that arrives without a PENDING.
-       */
-       if (_checker.send (type, property)) {
-               return;
-       }
-
        shared_ptr<const Film> film = weak_film.lock ();
        DCPOMATIC_ASSERT (film);
 
        shared_ptr<const Film> film = weak_film.lock ();
        DCPOMATIC_ASSERT (film);
 
index dc984aacf077d64f78ea37520d9162cbfdbad9f8..51c13e33f19a1af510ffcaf5763d65f7689bae7b 100644 (file)
@@ -1,5 +1,5 @@
 /*
 /*
-    Copyright (C) 2013-2018 Carl Hetherington <cth@carlh.net>
+    Copyright (C) 2013-2020 Carl Hetherington <cth@carlh.net>
 
     This file is part of DCP-o-matic.
 
 
     This file is part of DCP-o-matic.
 
 
 #include "util.h"
 #include "frame_rate_change.h"
 
 #include "util.h"
 #include "frame_rate_change.h"
-#include "atomicity_checker.h"
 #include <libcxml/cxml.h>
 #include <boost/shared_ptr.hpp>
 #include <boost/signals2.hpp>
 #include <libcxml/cxml.h>
 #include <boost/shared_ptr.hpp>
 #include <boost/signals2.hpp>
+#include <boost/thread.hpp>
 #include <list>
 
 class Film;
 #include <list>
 
 class Film;
@@ -94,7 +94,6 @@ private:
        bool _sequence;
        bool _sequencing;
        std::list<boost::signals2::connection> _content_connections;
        bool _sequence;
        bool _sequencing;
        std::list<boost::signals2::connection> _content_connections;
-       AtomicityChecker _checker;
 };
 
 #endif
 };
 
 #endif
index fb222fcf4c73f4189a042629e97ebfed4f993c00..ad4dbd87d4aaf14e40b1e2d79a64db983d8daf1a 100644 (file)
@@ -1,5 +1,5 @@
 #
 #
-#    Copyright (C) 2012-2015 Carl Hetherington <cth@carlh.net>
+#    Copyright (C) 2012-2020 Carl Hetherington <cth@carlh.net>
 #
 #    This file is part of DCP-o-matic.
 #
 #
 #    This file is part of DCP-o-matic.
 #
@@ -26,7 +26,6 @@ sources = """
           analyse_subtitles_job.cc
           analytics.cc
           atmos_mxf_content.cc
           analyse_subtitles_job.cc
           analytics.cc
           atmos_mxf_content.cc
-          atomicity_checker.cc
           audio_analysis.cc
           audio_buffers.cc
           audio_content.cc
           audio_analysis.cc
           audio_buffers.cc
           audio_content.cc