rdieter pushed to digikam (epel7). "Revert "backport "Reorder mutex lock" fix (#1091113)" (..more)"
notifications at fedoraproject.org
notifications at fedoraproject.org
Mon May 18 19:43:05 UTC 2015
From 3329f0339a1c3fc10fd8fd5ae438238d0a2acb60 Mon Sep 17 00:00:00 2001
From: Rex Dieter <rdieter at math.unl.edu>
Date: Tue, 1 Jul 2014 13:59:41 -0500
Subject: Revert "backport "Reorder mutex lock" fix (#1091113)"
This reverts commit 21d678989d96339290eae39c89049f9866f1fdfc.
diff --git a/0765-Reorder-mutex-locks-the-ImageInfo-ReadWriteLock-must.patch b/0765-Reorder-mutex-locks-the-ImageInfo-ReadWriteLock-must.patch
deleted file mode 100644
index cb6aa1f..0000000
--- a/0765-Reorder-mutex-locks-the-ImageInfo-ReadWriteLock-must.patch
+++ /dev/null
@@ -1,108 +0,0 @@
-From 010d0293d322ce458d00ef1ff35ac90562ef7da6 Mon Sep 17 00:00:00 2001
-From: Marcel Wiesweg <marcel.wiesweg at gmx.de>
-Date: Tue, 4 Mar 2014 13:41:50 +0100
-Subject: [PATCH 765/804] Reorder mutex locks - the ImageInfo ReadWriteLock
- must remain an "inner", transparent mutex. It is called from a place where
- DatabaseAccess is locked, so DatabaseAccess must not be locked from a place
- where the ImageInfo lock is held. To reduce by one or two mutex locks,
- consolidate read operations at one place and return the hash from a local
- variable which is in sync with the cached hash. (note: we do not rule out a
- parallel operation between the DatabaseAccess and the writing of the cached
- values. it's so far acceptable for a read cache.)
-
-CCMAIL: mike at mghansen.de
-BUG: 331578
----
- libs/database/imageinfo.cpp | 33 ++++++++++++++++++++++-----------
- 1 file changed, 22 insertions(+), 11 deletions(-)
-
-diff --git a/libs/database/imageinfo.cpp b/libs/database/imageinfo.cpp
-index 631dda7..223ec13 100644
---- a/libs/database/imageinfo.cpp
-+++ b/libs/database/imageinfo.cpp
-@@ -1711,24 +1711,32 @@ QDebug& operator<<(QDebug& stream, const ImageInfo& info)
-
- ImageInfo::DatabaseFieldsHashRaw ImageInfo::getDatabaseFieldsRaw(const DatabaseFields::Set& requestedSet) const
- {
-- if (!m_data)
-+ if (!m_data || (!m_data->hasVideoMetadata && !m_data->hasImageMetadata))
- {
- return DatabaseFieldsHashRaw();
- }
-
-- // keep the system locked to make sure all fields are taken from the same cache state
-- /// @todo Actually we need a read-write-lock, but we only have a write lock.
-- ImageInfoWriteLocker writeLocker;
-+ DatabaseFields::VideoMetadataMinSizeType cachedVideoMetadata;
-+ DatabaseFields::ImageMetadataMinSizeType cachedImageMetadata;
-+ ImageInfo::DatabaseFieldsHashRaw cachedHash;
-+ // consolidate to one ReadLocker. In particular, the shallow copy of the QHash must be done under protection
-+ {
-+ ImageInfoReadLocker lock;
-+ cachedVideoMetadata = m_data->videoMetadataCached;
-+ cachedImageMetadata = m_data->imageMetadataCached;
-+ cachedHash = m_data->databaseFieldsHashRaw;
-+ }
-+
- if (requestedSet.hasFieldsFromVideoMetadata() && m_data->hasVideoMetadata)
- {
- const DatabaseFields::VideoMetadata requestedVideoMetadata = requestedSet.getVideoMetadata();
-+ const DatabaseFields::VideoMetadata missingVideoMetadata = requestedVideoMetadata & ~cachedVideoMetadata;
-
-- const DatabaseFields::VideoMetadata missingVideoMetadata = requestedVideoMetadata & ~m_data->videoMetadataCached;
--// kDebug()<<QString("videometadata: requested: %1 missing: %3").arg(requestedVideoMetadata, 0, 16).arg(missingVideoMetadata, 0, 16);
- if (missingVideoMetadata)
- {
- const QVariantList fieldValues = DatabaseAccess().db()->getVideoMetadata(m_data->id, missingVideoMetadata);
-
-+ ImageInfoWriteLocker lock;
- if (fieldValues.isEmpty())
- {
- m_data.constCastData()->hasVideoMetadata = false;
-@@ -1746,21 +1754,23 @@ ImageInfo::DatabaseFieldsHashRaw ImageInfo::getDatabaseFieldsRaw(const DatabaseF
- m_data.constCastData()->databaseFieldsHashRaw.insertField(*it, fieldValue);
- }
-
-- m_data.constCastData()->videoMetadataCached|=missingVideoMetadata;
-+ m_data.constCastData()->videoMetadataCached |= missingVideoMetadata;
- }
-+ // update for return value
-+ cachedHash = m_data->databaseFieldsHashRaw;
- }
- }
-
- if (requestedSet.hasFieldsFromImageMetadata() && m_data->hasImageMetadata)
- {
- const DatabaseFields::ImageMetadata requestedImageMetadata = requestedSet.getImageMetadata();
-+ const DatabaseFields::ImageMetadata missingImageMetadata = requestedImageMetadata & ~cachedImageMetadata;
-
-- const DatabaseFields::ImageMetadata missingImageMetadata = requestedImageMetadata & ~m_data->imageMetadataCached;
--// kDebug()<<QString("imagemetadata: requested: %1 missing: %3").arg(requestedImageMetadata, 0, 16).arg(missingImageMetadata, 0, 16);
- if (missingImageMetadata)
- {
- const QVariantList fieldValues = DatabaseAccess().db()->getImageMetadata(m_data->id, missingImageMetadata);
-
-+ ImageInfoWriteLocker lock;
- if (fieldValues.isEmpty())
- {
- m_data.constCastData()->hasImageMetadata = false;
-@@ -1778,13 +1788,14 @@ ImageInfo::DatabaseFieldsHashRaw ImageInfo::getDatabaseFieldsRaw(const DatabaseF
- m_data.constCastData()->databaseFieldsHashRaw.insertField(*it, fieldValue);
- }
-
-- m_data.constCastData()->imageMetadataCached|=missingImageMetadata;
-+ m_data.constCastData()->imageMetadataCached |= missingImageMetadata;
- }
-+ cachedHash = m_data->databaseFieldsHashRaw;
- }
- }
-
- // We always return all fields, the caller can just retrieve the ones he needs.
-- return m_data->databaseFieldsHashRaw;
-+ return cachedHash;
- }
-
- QVariant ImageInfo::getDatabaseFieldRaw(const DatabaseFields::Set& requestedField) const
---
-1.9.0
-
diff --git a/digikam.spec b/digikam.spec
index cdd3401..e4cd082 100644
--- a/digikam.spec
+++ b/digikam.spec
@@ -6,7 +6,7 @@
Name: digikam
Version: 3.5.0
-Release: 5%{?pre}%{?dist}
+Release: 4%{?pre}%{?dist}
Summary: A digital camera accessing & photo management application
License: GPLv2+
@@ -25,8 +25,6 @@ Patch51: digikam-3.1.0-opencv20.patch
## upstream patches
# git 3d1a27f9
Patch100: digikam-3.5.0-panorama-crasher.patch
-# https://bugzilla.redhat.com/show_bug.cgi?id=1091113
-Patch101: 0765-Reorder-mutex-locks-the-ImageInfo-ReadWriteLock-must.patch
BuildRequires: eigen3-devel
BuildRequires: desktop-file-utils
@@ -233,9 +231,6 @@ BuildArch: noarch
%endif
%patch100 -p1 -b .panaroma-crasher
-pushd core
-%patch101 -p1 -b .mutex
-popd
# don't use bundled/old FindKipi.cmake in favor of kdelibs' version
# see http:/bugs.kde.org/307213
@@ -537,9 +532,6 @@ update-desktop-database -q &> /dev/null
%changelog
-* Fri Apr 25 2014 Rex Dieter <rdieter at fedoraproject.org> 3.5.0-5
-- backport "Reorder mutex lock" fix (#1091113)
-
* Tue Feb 04 2014 Rex Dieter <rdieter at fedoraproject.org> 3.5.0-4
- rebuild (kde-4.12)
--
cgit v0.10.2
http://pkgs.fedoraproject.org/cgit/digikam.git/commit/?h=epel7&id=3329f0339a1c3fc10fd8fd5ae438238d0a2acb60
More information about the scm-commits
mailing list