def generate_key(self, system_path): if system_path in self.keys: return self.keys[system_path] self.next_key += 1 self.keys[system_path] = self.next_key log_lock.info("generated key %d for path %s" % (self.next_key,system_path)) return self.next_key
def create_lock(self, cur_dir, ami_path, exclusive): if ami_path == '': if cur_dir == None: ami_path = "SYS:" else: ami_path = cur_dir.ami_path else: ami_path = self.path_mgr.ami_abs_path(cur_dir, ami_path) sys_path = self.path_mgr.ami_to_sys_path(cur_dir, ami_path, searchMulti=True) name = self.path_mgr.ami_name_of_path(cur_dir, ami_path) if sys_path == None: log_lock.info("lock '%s' invalid: no sys path found: '%s'", name, ami_path) return None exists = os.path.exists(sys_path) if not exists: log_lock.info( "lock '%s' invalid: sys path does not exist: '%s' -> '%s'", name, ami_path, sys_path) return None lock = Lock(name, ami_path, sys_path, exclusive) self._register_lock(lock) return 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 lock.free(self.alloc)
def _register_lock(self, lock): # look up volume volume_name = self.path_mgr.ami_volume_of_path(lock.ami_path) log_lock.debug("fl_Volume: looking up volume '%s' of %s",volume_name,lock) volume = self.dos_list.get_entry_by_name(volume_name) if volume is None: vol_baddr = 0 log_lock.warn("lock volume? volume=%s lock=%s",volume,lock) else: vol_baddr = volume.mem.addr # allocate lock struct b_addr = lock.alloc(self.alloc, vol_baddr, self.generate_key) self.locks_by_baddr[b_addr] = lock log_lock.info("registered: %s" % lock)
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) name = self.path_mgr.ami_name_of_path(ami_path) if sys_path == None: log_lock.info("lock '%s' invalid: no sys path found: '%s'", name, ami_path) return None exists = os.path.exists(sys_path) if not exists: log_lock.info("lock '%s' invalid: sys path does not exist: '%s' -> '%s'", name, ami_path, sys_path) return None lock = Lock(name, ami_path, sys_path, exclusive) self._register_lock(lock) return lock
def _unregister_lock(self, lock): del self.locks_by_baddr[lock.b_addr] log_lock.info("unregistered: %s" % lock) lock.free(self.alloc) del lock