def _check_version(self, name, addr, open_ver): # check version lib = Library(self.mem, addr) lib_ver = lib.version if lib_ver < open_ver: log_libmgr.warn("lib '%s' has too low version: %d < %d", name, lib_ver, open_ver) return 0 else: log_libmgr.info("lib '%s' version %d ok for open version %d", name, lib_ver, open_ver) return addr
def _expunge_list(self, node_list): left_libs = 0 for node in node_list: lib_base = node.get_addr() # is it a vlib? if lib_base in self.addr_vlib: vlib = self.addr_vlib[lib_base] if not self.expunge_lib(vlib): lib = vlib.get_library() log_libmgr.warn("can't expunge: '%s' with open count %d", lib.name, lib.open_cnt) left_libs += 1 return left_libs
def shutdown(self, run_sp=None): """cleanup libs try to expunge all libs and report still open ones """ log_libmgr.info("+shutdown") aleft = self.alib_mgr.shutdown(run_sp) if aleft > 0: log_libmgr.warn("shutdown: can't expunge %d amiga libs/devs!", aleft) vleft = self.vlib_mgr.shutdown() if vleft > 0: log_libmgr.warn("shutdown: can't expunge %d vamos libs/devs!", vleft) left = vleft + aleft log_libmgr.info("-shutdwon: aleft=%d, vleft=%d", aleft, vleft) return left
def _load_common(self, lib_name, seglist_baddr, run_sp): # find resident in first hunk seglist = SegList(self.alloc, seglist_baddr) seg = seglist.get_segment() res = Resident.find(self.mem, seg.get_addr(), seg.get_size()) # unload seglist if no resident was found if not res: log_libmgr.warn("%s: no resident found!", lib_name) self.segloader.unload_seglist(seglist_baddr) return 0, 0 # init resident lib_base, _ = self.initres.init_resident(res.get_addr(), seglist.get_baddr(), run_sp=run_sp) # unload seglist on error if lib_base == 0: log_libmgr.warn("%s: init resident failed!", lib_name) self.segloader.unload_seglist(seglist_baddr) return 0, 0 return lib_base, seglist_baddr