[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [publictransport] engine/script: Fix deadlock in Scripting::Storage
From: Friedrich_Karl_Tilman_Pülz <fpuelz () gmx ! de>
Date: 2012-11-30 20:36:57
Message-ID: 20121130203657.9304AA60D6 () git ! kde ! org
[Download RAW message or body]
Git commit c9719c54586edd50d89ff263de853341db40c94a by Friedrich Karl Tilman Pülz.
Committed on 28/11/2012 at 06:03.
Pushed by fkpulz into branch 'master'.
Fix deadlock in Scripting::Storage
Fixed by making the QReadWriteLock recursive, eg. needed for
Storage::lifetime(). And a QWriteLocker was used instead of
a QReadLocker.
Discovered with ScriptApiTest.
M +3 -2 engine/script/scripting.cpp
http://commits.kde.org/publictransport/c9719c54586edd50d89ff263de853341db40c94a
diff --git a/engine/script/scripting.cpp b/engine/script/scripting.cpp
index 9a7189a..923c4b2 100644
--- a/engine/script/scripting.cpp
+++ b/engine/script/scripting.cpp
@@ -1631,7 +1631,8 @@ const char* Storage::LIFETIME_ENTRYNAME_SUFFIX = "__expires__";
class StoragePrivate {
public:
StoragePrivate( const QString &serviceProvider )
- : readWriteLock(new QReadWriteLock), readWriteLockPersistent(new QReadWriteLock),
+ : readWriteLock(new QReadWriteLock(QReadWriteLock::Recursive)),
+ readWriteLockPersistent(new QReadWriteLock(QReadWriteLock::Recursive)),
serviceProvider(serviceProvider), lastLifetimeCheck(0), config(0) {
};
@@ -1725,7 +1726,7 @@ void Storage::clear()
int Storage::lifetime( const QString& name )
{
- QWriteLocker locker( d->readWriteLockPersistent );
+ QReadLocker locker( d->readWriteLockPersistent );
return lifetime( name, d->persistentGroup() );
}
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic