diff --git a/src/calibre/ebooks/metadata/sources/base.py b/src/calibre/ebooks/metadata/sources/base.py index 54d7d49d6d..142224c599 100644 --- a/src/calibre/ebooks/metadata/sources/base.py +++ b/src/calibre/ebooks/metadata/sources/base.py @@ -65,7 +65,8 @@ class Source(Plugin): parts = parts[1:] + parts[:1] for tok in parts: tok = pat.sub('', tok).strip() - yield tok + if len(tok) > 2 and tok.lower() not in ('von', ): + yield tok def get_title_tokens(self, title): diff --git a/src/calibre/utils/ipc/launch.py b/src/calibre/utils/ipc/launch.py index 28d5d889e3..bc7927aa11 100644 --- a/src/calibre/utils/ipc/launch.py +++ b/src/calibre/utils/ipc/launch.py @@ -94,7 +94,14 @@ class Worker(object): if not hasattr(self, 'child'): return None return getattr(self.child, 'pid', None) + def close_log_file(self): + try: + self._file.close() + except: + pass + def kill(self): + self.close_log_file() try: if self.is_alive: if iswindows: diff --git a/src/calibre/utils/ipc/server.py b/src/calibre/utils/ipc/server.py index 4d35113d80..e3b7bfd449 100644 --- a/src/calibre/utils/ipc/server.py +++ b/src/calibre/utils/ipc/server.py @@ -34,6 +34,7 @@ class ConnectedWorker(Thread): self.killed = False self.log_path = worker.log_path self.rfile = rfile + self.close_log_file = getattr(worker, 'close_log_file', None) def start_job(self, job): notification = PARALLEL_FUNCS[job.name][-1] is not None @@ -185,6 +186,10 @@ class Server(Thread): # Remove finished jobs for worker in [w for w in self.workers if not w.is_alive]: + try: + worker.close_log_file() + except: + pass self.workers.remove(worker) job = worker.job if worker.returncode != 0: