From 5b3d828fc342bc1940746ba8c5b73f4c40a6031e Mon Sep 17 00:00:00 2001 From: Faik Uygur Date: Wed, 19 Apr 2006 08:28:54 +0000 Subject: [PATCH] =?UTF-8?q?write=20hakl=C4=B1=20bir=20pisi=20=C3=A7al?= =?UTF-8?q?=C4=B1=C5=9F=C4=B1yorsa,=20ikinci=20pisi=20dbenv'=C4=B1=20hi?= =?UTF-8?q?=C3=A7=20a=C3=A7amadan=20hata=20mesaj=C4=B1=20verip,=20sonlans?= =?UTF-8?q?=C4=B1n=20(#1958)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pisi/api.py | 2 ++ pisi/lockeddbshelve.py | 8 ++++++++ 2 files changed, 10 insertions(+) diff --git a/pisi/api.py b/pisi/api.py index f46d359d..0dd0c525 100644 --- a/pisi/api.py +++ b/pisi/api.py @@ -109,6 +109,8 @@ def finalize(): pisi.search.finalize() if ctx.dbenv: ctx.dbenv.close() + ctx.dbenv_lock.close() + ctx.ui.debug('PISI API finalized') ctx.ui.close() ctx.initialized = False diff --git a/pisi/lockeddbshelve.py b/pisi/lockeddbshelve.py index fe149568..589f6e21 100644 --- a/pisi/lockeddbshelve.py +++ b/pisi/lockeddbshelve.py @@ -67,6 +67,13 @@ def check_dbversion(versionfile, ver, write=False, update=False): else: raise Error(_('Database version %s not present.') % versionfile) +def lock_dbenv(): + ctx.dbenv_lock = file(join_path(pisi.context.config.db_dir(), 'dbenv.lock'), 'w') + try: + fcntl.flock(ctx.dbenv_lock, fcntl.LOCK_EX | fcntl.LOCK_NB) + except IOError: + raise Error(_("Another instance of PISI is running. Only one instance is allowed to modify the PISI database at a time.")) + # write: write access to database environment # writeversion: would you like to be able def init_dbenv(write=False, writeversion=False): @@ -77,6 +84,7 @@ def init_dbenv(write=False, writeversion=False): else: raise Error(_('Cannot attain read access to database environment')) if write and os.access(pisi.context.config.db_dir(), os.W_OK): + lock_dbenv() ctx.dbenv = dbobj.DBEnv() flags = (db.DB_INIT_MPOOL | # cache db.DB_INIT_TXN | # transaction subsystem