def _register_lock(self, lock): addr = self.cur_addr self.cur_addr += self.lock_size lock.addr = addr lock.b_addr = addr >> 2 self.locks_by_b_addr[lock.b_addr] = lock log_lock.info("registered: %s" % lock)
def _unregister_lock(self, lock): if not self.locks_by_b_addr.has_key(lock.b_addr): raise VamosInternalError("Lock %s not registered!" % lock) check = self.locks_by_b_addr[lock.b_addr] if check != lock: raise VamosInternalError("Invalid Lock unregistered: %s" % lock) del self.locks_by_b_addr[lock.b_addr] log_lock.info("unregistered: %s" % lock) lock.b_addr = 0 lock.addr = 0
def __init__(self, path_mgr, doslist_mgr, base_addr, size): self.path_mgr = path_mgr self.doslist_mgr = doslist_mgr self.base_addr = base_addr self.cur_addr = base_addr log_lock.info("init manager: base=%06x" % self.base_addr) self.locks_by_b_addr = {} LabelRange.__init__(self, "locks", base_addr, size) self.lock_def = FileLockDef self.lock_size = FileLockDef.get_size()
def create_lock(self, ami_path, exclusive): if ami_path == '': ami_path = self.path_mgr.ami_abs_cur_path() else: ami_path = self.path_mgr.ami_abs_path(ami_path) sys_path = self.path_mgr.ami_to_sys_path(ami_path) if sys_path == None: log_lock.info("lock not found: '%s'" % ami_path) return None exists = os.path.exists(sys_path) if not exists: log_lock.info("lock not found: '%s' -> '%s'" % (ami_path, sys_path)) return None name = self.path_mgr.ami_name_of_path(ami_path) lock = AmiLock(name, ami_path, sys_path, exclusive) self._register_lock(lock) return lock