summaryrefslogtreecommitdiffstats
path: root/pym
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2010-09-13 19:48:18 -0700
committerZac Medico <zmedico@gentoo.org>2010-09-13 19:48:18 -0700
commitf6f71779b532ceec35021fb047b0c8db1806e65d (patch)
tree1cf1305d11cd2d95e26f9cc42a8d6925cec236f5 /pym
parentd2e97d34a60ca84c84b42f9c0f732c22be7a0b46 (diff)
downloadportage-f6f71779b532ceec35021fb047b0c8db1806e65d.tar.gz
portage-f6f71779b532ceec35021fb047b0c8db1806e65d.tar.bz2
portage-f6f71779b532ceec35021fb047b0c8db1806e65d.zip
Make dblink.lockdb() use AsynchronousLock.
Diffstat (limited to 'pym')
-rw-r--r--pym/portage/dbapi/vartree.py36
1 files changed, 7 insertions, 29 deletions
diff --git a/pym/portage/dbapi/vartree.py b/pym/portage/dbapi/vartree.py
index 4571e0914..742bc6049 100644
--- a/pym/portage/dbapi/vartree.py
+++ b/pym/portage/dbapi/vartree.py
@@ -37,7 +37,7 @@ from portage.const import _ENABLE_DYN_LINK_MAP, _ENABLE_PRESERVE_LIBS
from portage.dbapi import dbapi
from portage.exception import CommandNotFound, \
InvalidData, InvalidPackageName, \
- FileNotFound, PermissionDenied, TryAgain, UnsupportedAPIException
+ FileNotFound, PermissionDenied, UnsupportedAPIException
from portage.localization import _
from portage.util.movefile import movefile
@@ -51,6 +51,7 @@ from portage import _selinux_merge
from portage import _unicode_decode
from portage import _unicode_encode
+from _emerge.AsynchronousLock import AsynchronousLock
from _emerge.PollScheduler import PollScheduler
from _emerge.MiscFunctionsProcess import MiscFunctionsProcess
@@ -62,10 +63,6 @@ import os as _os
import stat
import sys
import tempfile
-try:
- import threading
-except ImportError:
- import dummy_threading as threading
import time
import warnings
@@ -1297,36 +1294,17 @@ class dblink(object):
if self._scheduler is None:
self._lock_vdb = lockdir(self.dbroot)
else:
- try:
- self._lock_vdb = lockdir(self.dbroot, flags=os.O_NONBLOCK)
- except TryAgain:
- self._lockdb_rlock = threading.RLock()
- lockdb_thread = threading.Thread(
- target=self._lockdb_thread)
- lockdb_thread.start()
- if not self._lockdb_have_lock():
- self._scheduler.schedule(
- condition=self._lockdb_have_lock)
- lockdb_thread.join()
- self._lockdb_rlock = None
+ async_lock = AsynchronousLock(path=self.dbroot,
+ scheduler=self._scheduler)
+ async_lock.start()
+ async_lock.wait()
+ self._lock_vdb = async_lock.lock_obj
def unlockdb(self):
if self._lock_vdb:
unlockdir(self._lock_vdb)
self._lock_vdb = None
- def _lockdb_thread(self):
- lock_vdb = lockdir(self.dbroot)
- self._lockdb_rlock.acquire()
- self._lock_vdb = lock_vdb
- self._lockdb_rlock.release()
-
- def _lockdb_have_lock(self):
- self._lockdb_rlock.acquire()
- rval = self._lock_vdb is not None
- self._lockdb_rlock.release()
- return rval
-
def getpath(self):
"return path to location of db information (for >>> informational display)"
return self.dbdir