write haklı bir pisi çalışıyorsa, ikinci pisi dbenv'ı hiç açamadan

hata mesajı verip, sonlansın (#1958)
This commit is contained in:
Faik Uygur
2006-04-19 08:28:54 +00:00
parent 5e0b05f930
commit 5b3d828fc3
2 changed files with 10 additions and 0 deletions
+2
View File
@@ -109,6 +109,8 @@ def finalize():
pisi.search.finalize() pisi.search.finalize()
if ctx.dbenv: if ctx.dbenv:
ctx.dbenv.close() ctx.dbenv.close()
ctx.dbenv_lock.close()
ctx.ui.debug('PISI API finalized') ctx.ui.debug('PISI API finalized')
ctx.ui.close() ctx.ui.close()
ctx.initialized = False ctx.initialized = False
+8
View File
@@ -67,6 +67,13 @@ def check_dbversion(versionfile, ver, write=False, update=False):
else: else:
raise Error(_('Database version %s not present.') % versionfile) 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 # write: write access to database environment
# writeversion: would you like to be able # writeversion: would you like to be able
def init_dbenv(write=False, writeversion=False): def init_dbenv(write=False, writeversion=False):
@@ -77,6 +84,7 @@ def init_dbenv(write=False, writeversion=False):
else: else:
raise Error(_('Cannot attain read access to database environment')) raise Error(_('Cannot attain read access to database environment'))
if write and os.access(pisi.context.config.db_dir(), os.W_OK): if write and os.access(pisi.context.config.db_dir(), os.W_OK):
lock_dbenv()
ctx.dbenv = dbobj.DBEnv() ctx.dbenv = dbobj.DBEnv()
flags = (db.DB_INIT_MPOOL | # cache flags = (db.DB_INIT_MPOOL | # cache
db.DB_INIT_TXN | # transaction subsystem db.DB_INIT_TXN | # transaction subsystem