Add believed-necessary locking to ActiveText.
authorCarl Hetherington <cth@carlh.net>
Wed, 25 Jul 2018 22:50:30 +0000 (23:50 +0100)
committerCarl Hetherington <cth@carlh.net>
Wed, 25 Jul 2018 22:50:30 +0000 (23:50 +0100)
src/lib/active_text.cc
src/lib/active_text.h

index de3dc816563cb8b3c0e46807dbab4bb27218ba1f..6e813144cf2e6240204900388dd979cb63c1092e 100644 (file)
@@ -45,6 +45,8 @@ ActiveText::add (DCPTimePeriod period, list<PlayerText>& pc, list<Period> p) con
 list<PlayerText>
 ActiveText::get (DCPTimePeriod period) const
 {
+       boost::mutex::scoped_lock lm (_mutex);
+
        list<PlayerText> ps;
 
        for (Map::const_iterator i = _data.begin(); i != _data.end(); ++i) {
@@ -67,6 +69,8 @@ ActiveText::get (DCPTimePeriod period) const
 list<PlayerText>
 ActiveText::get_burnt (DCPTimePeriod period, bool always_burn_captions) const
 {
+       boost::mutex::scoped_lock lm (_mutex);
+
        list<PlayerText> ps;
 
        for (Map::const_iterator i = _data.begin(); i != _data.end(); ++i) {
@@ -93,6 +97,8 @@ ActiveText::get_burnt (DCPTimePeriod period, bool always_burn_captions) const
 void
 ActiveText::clear_before (DCPTime time)
 {
+       boost::mutex::scoped_lock lm (_mutex);
+
        Map updated;
        for (Map::const_iterator i = _data.begin(); i != _data.end(); ++i) {
                list<Period> as;
@@ -116,6 +122,8 @@ ActiveText::clear_before (DCPTime time)
 void
 ActiveText::add_from (weak_ptr<const TextContent> content, PlayerText ps, DCPTime from)
 {
+       boost::mutex::scoped_lock lm (_mutex);
+
        if (_data.find(content) == _data.end()) {
                _data[content] = list<Period>();
        }
@@ -130,6 +138,8 @@ ActiveText::add_from (weak_ptr<const TextContent> content, PlayerText ps, DCPTim
 pair<PlayerText, DCPTime>
 ActiveText::add_to (weak_ptr<const TextContent> content, DCPTime to)
 {
+       boost::mutex::scoped_lock lm (_mutex);
+
        DCPOMATIC_ASSERT (_data.find(content) != _data.end());
 
        _data[content].back().to = to;
@@ -147,6 +157,8 @@ ActiveText::add_to (weak_ptr<const TextContent> content, DCPTime to)
 bool
 ActiveText::have (weak_ptr<const TextContent> content) const
 {
+       boost::mutex::scoped_lock lm (_mutex);
+
        Map::const_iterator i = _data.find(content);
        if (i == _data.end()) {
                return false;
@@ -158,5 +170,6 @@ ActiveText::have (weak_ptr<const TextContent> content) const
 void
 ActiveText::clear ()
 {
+       boost::mutex::scoped_lock lm (_mutex);
        _data.clear ();
 }
index 10ce30f08476711a511f9d7ee53b09fb5c30d7e1..1dab7a867540b38927bea08f29b315a1ca87866e 100644 (file)
@@ -25,6 +25,7 @@
 #include "dcpomatic_time.h"
 #include "player_text.h"
 #include <boost/noncopyable.hpp>
+#include <boost/thread/mutex.hpp>
 #include <list>
 #include <map>
 
@@ -64,5 +65,6 @@ private:
 
        void add (DCPTimePeriod period, std::list<PlayerText>& pc, std::list<Period> p) const;
 
+       mutable boost::mutex _mutex;
        Map _data;
 };