From 7e40267790544b4b838968b723dccbd803a6d385 Mon Sep 17 00:00:00 2001 From: l10n daemon script Date: Fri, 17 Jan 2020 10:22:33 +0100 Subject: [PATCH 1/4] SVN_SILENT made messages (.desktop file) - always resolve ours In case of conflict in i18n, keep the version of the branch "ours" To resolve a particular conflict, "git checkout --ours path/to/file.desktop" --- generators/comicbook/org.kde.mobile.okular_comicbook.desktop | 1 + 1 file changed, 1 insertion(+) diff --git a/generators/comicbook/org.kde.mobile.okular_comicbook.desktop b/generators/comicbook/org.kde.mobile.okular_comicbook.desktop index 7c45be9a2..a0bdd664d 100644 --- a/generators/comicbook/org.kde.mobile.okular_comicbook.desktop +++ b/generators/comicbook/org.kde.mobile.okular_comicbook.desktop @@ -167,6 +167,7 @@ X-KDE-Keywords[eu]=cbr, cbz, cbt, komiki-liburua X-KDE-Keywords[fi]=cbr, cbz, cbt, Comic Book X-KDE-Keywords[fr]=cbr, cbz, cbt, Comic Book X-KDE-Keywords[gl]=cbr, cbz, cbt, Comic Book +X-KDE-Keywords[ia]=cbr, cbz, cbt, Comic Book(Libro de Comic) X-KDE-Keywords[it]=cbr, cbz, cbt, Comic Book X-KDE-Keywords[nb]=cbr, cbz, cbt, tegneserie X-KDE-Keywords[nl]=cbr, cbz, cbt, Stripverhaal From 593803b0a1d98eba64aac38316aa521130b4ae78 Mon Sep 17 00:00:00 2001 From: Tobias Deiminger Date: Wed, 29 Jan 2020 23:19:52 +0100 Subject: [PATCH 2/4] Fix render stop and high load due to timing issue Text generation is connected to pixmap generation thread started signal. However the signal may have been emitted faster than the connect could took place, and because started is fired only once, the connected lambda never got executed. generatePixmap tried to sync up with that never happening text generation anyway by means of scheduling itself. This lead to a infinite loop via a no more sleeping QEventLoop. Fixed by moving the connect in front of starting the thread. BUG: 396137 BUG: 396087 CCBUG: 403643 --- core/generator.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/generator.cpp b/core/generator.cpp index f2af4612f..9e43375a9 100644 --- a/core/generator.cpp +++ b/core/generator.cpp @@ -279,8 +279,6 @@ void Generator::generatePixmap( PixmapRequest *request ) return; } - d->pixmapGenerationThread()->startGeneration( request, calcBoundingBox ); - /** * We create the text page for every page that is visible to the * user, so he can use the text extraction tools without a delay. @@ -297,6 +295,8 @@ void Generator::generatePixmap( PixmapRequest *request ) d_ptr->textPageGenerationThread()->startGeneration(); }); } + // pixmap generation thread must be started *after* connect(), else we may miss the start signal and get lock-ups (see bug 396137) + d->pixmapGenerationThread()->startGeneration( request, calcBoundingBox ); return; } From 378e99d719aacc1d8c06bf07588bbe61fd5aba15 Mon Sep 17 00:00:00 2001 From: Tobias Deiminger Date: Thu, 30 Jan 2020 09:28:17 +0100 Subject: [PATCH 3/4] Fix race condition in generator.cpp The check whether to allocate a new QMutex was unprotected. Two threads may check and allocate concurrently, but only one pointer gets remembered, the other one will leak. In worst case the returned mutex is different for two threads, so that two threads try to synchronize by using two different mutexes. --- core/generator.cpp | 15 +++------------ core/generator_p.h | 6 +++--- 2 files changed, 6 insertions(+), 15 deletions(-) diff --git a/core/generator.cpp b/core/generator.cpp index 9e43375a9..3da0b5ae1 100644 --- a/core/generator.cpp +++ b/core/generator.cpp @@ -41,7 +41,7 @@ using namespace Okular; GeneratorPrivate::GeneratorPrivate() : m_document( nullptr ), mPixmapGenerationThread( nullptr ), mTextPageGenerationThread( nullptr ), - m_mutex( nullptr ), m_threadsMutex( nullptr ), mPixmapReady( true ), mTextPageReady( true ), + mPixmapReady( true ), mTextPageReady( true ), m_closing( false ), m_closingLoop( nullptr ), m_dpi(72.0, 72.0) { @@ -59,9 +59,6 @@ GeneratorPrivate::~GeneratorPrivate() mTextPageGenerationThread->wait(); delete mTextPageGenerationThread; - - delete m_mutex; - delete m_threadsMutex; } PixmapGenerationThread* GeneratorPrivate::pixmapGenerationThread() @@ -163,9 +160,7 @@ void GeneratorPrivate::textpageGenerationFinished() QMutex* GeneratorPrivate::threadsLock() { - if ( !m_threadsMutex ) - m_threadsMutex = new QMutex(); - return m_threadsMutex; + return &m_threadsMutex; } QVariant GeneratorPrivate::metaData( const QString &, const QVariant & ) const @@ -508,11 +503,7 @@ QVariant Generator::documentMetaData( const DocumentMetaDataKey key, const QVari QMutex* Generator::userMutex() const { Q_D( const Generator ); - if ( !d->m_mutex ) - { - d->m_mutex = new QMutex(); - } - return d->m_mutex; + return &d->m_mutex; } void Generator::updatePageBoundingBox( int page, const NormalizedRect & boundingBox ) diff --git a/core/generator_p.h b/core/generator_p.h index 239be0a79..e5854c81f 100644 --- a/core/generator_p.h +++ b/core/generator_p.h @@ -15,12 +15,12 @@ #include "area.h" +#include #include #include #include class QEventLoop; -class QMutex; #include "generator.h" #include "page.h" @@ -65,8 +65,8 @@ class GeneratorPrivate QSet< int > m_features; PixmapGenerationThread *mPixmapGenerationThread; TextPageGenerationThread *mTextPageGenerationThread; - mutable QMutex *m_mutex; - QMutex *m_threadsMutex; + mutable QMutex m_mutex; + QMutex m_threadsMutex; bool mPixmapReady : 1; bool mTextPageReady : 1; bool m_closing : 1; From 134c16efdc1edfcd19896e3cc342fe6a8879a49f Mon Sep 17 00:00:00 2001 From: l10n daemon script Date: Fri, 31 Jan 2020 09:40:26 +0100 Subject: [PATCH 4/4] SVN_SILENT made messages (.desktop file) - always resolve ours In case of conflict in i18n, keep the version of the branch "ours" To resolve a particular conflict, "git checkout --ours path/to/file.desktop" --- generators/comicbook/okularApplication_comicbook.desktop | 1 + generators/comicbook/org.kde.mobile.okular_comicbook.desktop | 1 + 2 files changed, 2 insertions(+) diff --git a/generators/comicbook/okularApplication_comicbook.desktop b/generators/comicbook/okularApplication_comicbook.desktop index 3ecef675d..83b38911e 100755 --- a/generators/comicbook/okularApplication_comicbook.desktop +++ b/generators/comicbook/okularApplication_comicbook.desktop @@ -185,6 +185,7 @@ X-KDE-Keywords[nn]=cbr, cbz, cbt, cb7, Comic Book X-KDE-Keywords[pl]=cbr, cbz, cbt, cb7, Komiks X-KDE-Keywords[pt]=cbr, cbz, cbt, cb7, Comic Book X-KDE-Keywords[pt_BR]=cbr, cbz, cbt, cb7, Comic Book +X-KDE-Keywords[ru]=cbr, cbz, cbt, cb7, Comic Book, комикс X-KDE-Keywords[sk]=cbr, cbz, cbt, cb7, Kniha komiksov X-KDE-Keywords[sv]=cbr, cbz, cbt, cb7, Comic Book X-KDE-Keywords[uk]=cbr,cbz,cbt,cb7,комікс diff --git a/generators/comicbook/org.kde.mobile.okular_comicbook.desktop b/generators/comicbook/org.kde.mobile.okular_comicbook.desktop index a0bdd664d..8de7f5937 100644 --- a/generators/comicbook/org.kde.mobile.okular_comicbook.desktop +++ b/generators/comicbook/org.kde.mobile.okular_comicbook.desktop @@ -175,6 +175,7 @@ X-KDE-Keywords[nn]=cbr, cbz, cbt, Comic Book X-KDE-Keywords[pl]=cbr, cbz, cbt, Komiks X-KDE-Keywords[pt]=cbr, cbz, cbt, Comic Book X-KDE-Keywords[pt_BR]=cbr, cbz, cbt, Comic Book +X-KDE-Keywords[ru]=cbr, cbz, cbt, Comic Book, комикс X-KDE-Keywords[sk]=cbr, cbz, cbt, Kniha komiksov X-KDE-Keywords[sr]=cbr, cbz, cbt, Comic Book,комикбук X-KDE-Keywords[sr@ijekavian]=cbr, cbz, cbt, Comic Book,комикбук