From 9a43133a40e46ca5180672873254986d9239d0bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Metin?= Date: Sun, 31 Jul 2005 18:06:24 +0000 Subject: [PATCH] =?UTF-8?q?Eray'=C4=B1n=20bahsetti=C4=9Fi=20lock=20sorunu?= =?UTF-8?q?=20ile=20ilgili=20h=C4=B1zl=C4=B1-kirli=20bir=20=C3=A7=C3=B6z?= =?UTF-8?q?=C3=BCm.=20Bunun=20=C3=BCzerinden=20yile=C5=9Ftirme=20yapar?= =?UTF-8?q?=C4=B1z.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pisi/packagedb.py | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/pisi/packagedb.py b/pisi/packagedb.py index 97ed901b..940d9c05 100644 --- a/pisi/packagedb.py +++ b/pisi/packagedb.py @@ -10,6 +10,7 @@ #from bsddb.dbshelve import DBShelf import bsddb.dbshelve as shelve import os, fcntl +import atexit import util from config import config @@ -27,14 +28,15 @@ class PackageDB(object): self.d = shelve.open(self.fname) self.fname2 = os.path.join(config.db_dir(), 'revdep-%s.bdb' % id ) self.dr = shelve.open(self.fname2) - self.fdummy = file(self.fname + '.lock', 'w') + + self.lockfile = self.fname + '.lock' + if os.path.exists(self.lockfile): + # buraya hic bir zaman gelmemesi gerekiyor. + raise PackageDBError, "Lock file exists. Something is wrong!" + + self.fdummy = file(self.lockfile, 'w') fcntl.flock(self.fdummy, fcntl.LOCK_EX) - def __del__(self): - #fcntl.flock(self.fdummy, fcntl.LOCK_UN) - self.fdummy.close() - #os.unlink(self.fname + '.lock') - def has_package(self, name): name = str(name) return self.d.has_key(name) @@ -72,6 +74,7 @@ packagedbs = {} def add_db(name): packagedbs[name] = PackageDB('repo-' + name) + atexit.register(close, packagedbs[name]) def get_db(name): return packagedbs[name] @@ -102,6 +105,17 @@ def get_rev_deps(name): repo = which_repo(name) return get_db(repo).get_rev_deps(name) +def close(pkg_db): + try: + fcntl.flock(pkg_db.fdummy, fcntl.LOCK_UN) + pkg_db.fdummy.close() + os.unlink(pkg_db.lockfile) + except ValueError: + # packagedb allready closed. + pass + + #def remove_package inst_packagedb = PackageDB('local') +atexit.register(close, inst_packagedb)