projects
/
quix0rs-apt-p2p.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
ef79e4c
)
Apt packages cache now saves an unload request received during loading.
author
Cameron Dale
<camrdale@gmail.com>
Mon, 21 Apr 2008 05:09:34 +0000
(22:09 -0700)
committer
Cameron Dale
<camrdale@gmail.com>
Mon, 21 Apr 2008 05:09:34 +0000
(22:09 -0700)
apt_p2p/AptPackages.py
patch
|
blob
|
history
diff --git
a/apt_p2p/AptPackages.py
b/apt_p2p/AptPackages.py
index 69f1928803643fe779f930283f0ac5658fed6885..f7681a7380c1c53050a8b77c19f0aeb503b5b3f9 100644
(file)
--- a/
apt_p2p/AptPackages.py
+++ b/
apt_p2p/AptPackages.py
@@
-131,6
+131,8
@@
class AptPackages:
@type loading: L{twisted.internet.defer.Deferred}
@ivar loading: if the cache is currently being loaded, this will be
called when it is loaded, otherwise it is None
@type loading: L{twisted.internet.defer.Deferred}
@ivar loading: if the cache is currently being loaded, this will be
called when it is loaded, otherwise it is None
+ @type loading_unload: C{boolean}
+ @ivar loading_unload: whether there is an unload pending on the current load
@type unload_later: L{twisted.internet.interfaces.IDelayedCall}
@ivar unload_later: the delayed call to unload the apt cache
@type indexrecords: C{dictionary}
@type unload_later: L{twisted.internet.interfaces.IDelayedCall}
@ivar unload_later: the delayed call to unload the apt cache
@type indexrecords: C{dictionary}
@@
-205,6
+207,7
@@
class AptPackages:
self.packages = PackageFileList(cache_dir)
self.loaded = False
self.loading = None
self.packages = PackageFileList(cache_dir)
self.loaded = False
self.loading = None
+ self.loading_unload = False
self.unload_later = None
def __del__(self):
self.unload_later = None
def __del__(self):
@@
-253,6
+256,7
@@
class AptPackages:
# Make sure it's not already being loaded
if self.loading is None:
log.msg('Loading the packages cache')
# Make sure it's not already being loaded
if self.loading is None:
log.msg('Loading the packages cache')
+ self.loading_unload = False
self.loading = threads.deferToThread(self._load)
self.loading.addCallback(self.doneLoading)
return self.loading
self.loading = threads.deferToThread(self._load)
self.loading.addCallback(self.doneLoading)
return self.loading
@@
-260,6
+264,16
@@
class AptPackages:
def doneLoading(self, loadResult):
"""Cache is loaded."""
self.loading = None
def doneLoading(self, loadResult):
"""Cache is loaded."""
self.loading = None
+
+ # Check for a pending unload
+ if self.loading_unload:
+ log.msg('Re-loading the packages cache')
+ self.unload()
+ self.loading_unload = False
+ self.loading = threads.deferToThread(self._load)
+ self.loading.addCallback(self.doneLoading)
+ return self.loading
+
# Must pass on the result for the next callback
return loadResult
# Must pass on the result for the next callback
return loadResult
@@
-332,7
+346,9
@@
class AptPackages:
if self.unload_later and self.unload_later.active():
self.unload_later.cancel()
self.unload_later = None
if self.unload_later and self.unload_later.active():
self.unload_later.cancel()
self.unload_later = None
- if self.loaded:
+ if self.loading:
+ self.loading_unload = True
+ elif self.loaded:
log.msg('Unloading the packages cache')
# This should save memory
del self.cache
log.msg('Unloading the packages cache')
# This should save memory
del self.cache