cpp/poppler-document-private.h | 1 + cpp/poppler-document.cpp | 5 +++++ qt5/src/poppler-document.cc | 1 + qt5/src/poppler-private.cc | 4 ++++ qt5/src/poppler-private.h | 2 ++ 5 files changed, 13 insertions(+)
New commits: commit 91419d2a2c4966a4e347b78c50b65625164257db Author: Adam Reichold <[email protected]> Date: Mon Dec 3 19:57:18 2018 +0100 Make initialization of globalParams in the qt5 frontend threadsafe so that multiple threads can create documents concurrently. diff --git a/qt5/src/poppler-document.cc b/qt5/src/poppler-document.cc index ea2fd7e6..6dc7c6fb 100644 --- a/qt5/src/poppler-document.cc +++ b/qt5/src/poppler-document.cc @@ -56,6 +56,7 @@ namespace Poppler { int DocumentData::count = 0; + QMutex DocumentData::mutex; Document *Document::load(const QString &filePath, const QByteArray &ownerPassword, const QByteArray &userPassword) diff --git a/qt5/src/poppler-private.cc b/qt5/src/poppler-private.cc index 44f2167c..4668f51f 100644 --- a/qt5/src/poppler-private.cc +++ b/qt5/src/poppler-private.cc @@ -252,6 +252,8 @@ namespace Debug { delete (OptContentModel *)m_optContentModel; delete doc; + QMutexLocker locker{&mutex}; + count --; if ( count == 0 ) { @@ -267,6 +269,8 @@ namespace Debug { m_hints = 0; m_optContentModel = nullptr; + QMutexLocker locker{&mutex}; + if ( count == 0 ) { utf8Map = nullptr; diff --git a/qt5/src/poppler-private.h b/qt5/src/poppler-private.h index 8b2513cf..12a360c6 100644 --- a/qt5/src/poppler-private.h +++ b/qt5/src/poppler-private.h @@ -35,6 +35,7 @@ #define _POPPLER_PRIVATE_H_ #include <QtCore/QFile> +#include <QtCore/QMutex> #include <QtCore/QPointer> #include <QtCore/QVector> @@ -152,6 +153,7 @@ namespace Poppler { QColor paperColor; int m_hints; static int count; + static QMutex mutex; }; class FontInfoData commit e5ab9d3b387117d3d6f2e52de5d35882057fa209 Author: Yuliana <[email protected]> Date: Mon Dec 3 19:50:50 2018 +0100 Make initialization of globalParams in the cpp frontend threadsafe so that multiple threads can create documents concurrently. diff --git a/cpp/poppler-document-private.h b/cpp/poppler-document-private.h index 2121f1e1..901c22ce 100644 --- a/cpp/poppler-document-private.h +++ b/cpp/poppler-document-private.h @@ -44,6 +44,7 @@ public: initer& operator=(const initer &) = delete; private: + static std::mutex mutex; static unsigned int count; }; diff --git a/cpp/poppler-document.cpp b/cpp/poppler-document.cpp index b1d9451f..77fd24d6 100644 --- a/cpp/poppler-document.cpp +++ b/cpp/poppler-document.cpp @@ -42,10 +42,13 @@ using namespace poppler; +std::mutex poppler::initer::mutex; unsigned int poppler::initer::count = 0U; initer::initer() { + std::lock_guard<std::mutex> lock{mutex}; + if (!count) { globalParams = new GlobalParams(); setErrorCallback(detail::error_function, nullptr); @@ -55,6 +58,8 @@ initer::initer() initer::~initer() { + std::lock_guard<std::mutex> lock{mutex}; + if (count > 0) { --count; if (!count) { _______________________________________________ poppler mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/poppler
