From 11e6d596b80421d5eba5614f33d963e934c87f7e Mon Sep 17 00:00:00 2001 From: Fabio Erculiani Date: Thu, 26 Dec 2013 16:08:16 +0100 Subject: [PATCH] [entropy.db.sqlite] do not clear the cache if locks are already acquired --- lib/entropy/db/sqlite.py | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/lib/entropy/db/sqlite.py b/lib/entropy/db/sqlite.py index 53ad2dca9..5c006f0ce 100644 --- a/lib/entropy/db/sqlite.py +++ b/lib/entropy/db/sqlite.py @@ -563,11 +563,13 @@ class EntropySQLiteRepository(EntropySQLRepository): if lock.directed(): return lock + already_acquired = lock.is_already_acquired() lock.acquire_shared() - # in-RAM cached data may have become stale - if not self._is_memory(): - self.clearCache() + if not already_acquired: + # in-RAM cached data may have become stale + if not self._is_memory(): + self.clearCache() return lock @@ -579,11 +581,13 @@ class EntropySQLiteRepository(EntropySQLRepository): if lock.directed(): return lock + already_acquired = lock.is_already_acquired() acquired = lock.try_acquire_shared() if acquired: - # in-RAM cached data may have become stale - if not self._is_memory(): - self.clearCache() + if not already_acquired: + # in-RAM cached data may have become stale + if not self._is_memory(): + self.clearCache() return lock else: return None @@ -596,11 +600,13 @@ class EntropySQLiteRepository(EntropySQLRepository): if lock.directed(): return lock + already_acquired = lock.is_already_acquired() lock.acquire_exclusive() - # in-RAM cached data may have become stale - if not self._is_memory(): - self.clearCache() + if not already_acquired: + # in-RAM cached data may have become stale + if not self._is_memory(): + self.clearCache() return lock def try_acquire_exclusive(self): @@ -611,11 +617,13 @@ class EntropySQLiteRepository(EntropySQLRepository): if lock.directed(): return lock + already_acquired = lock.is_already_acquired() acquired = lock.try_acquire_exclusive() if acquired: - # in-RAM cached data may have become stale - if not self._is_memory(): - self.clearCache() + if not already_acquired: + # in-RAM cached data may have become stale + if not self._is_memory(): + self.clearCache() return lock def _release_reslock(self, lock, mode):