def _uses_httpclient(*args, **kwargs): # if there's already a curl_manager, then this is probably # being called in a nested context, so this iteration is not # in charge of starting and stopping the httpclient if httpclient.curl_manager: return fun(*args, **kwargs) httpclient.start_thread() try: return fun(*args, **kwargs) finally: httpclient.stop_thread()
def downloader_shutdown(self): logging.info("Shutting down libCURL thread") httpclient.stop_thread() httpclient.cleanup_libcurl() logging.info("Writing HTTP passwords") httpauth.write_to_file() logging.info("Shutting down event loop thread") eventloop.shutdown() logging.info("Saving cached ItemInfo objects") logging.info("Commiting DB changes") app.db.finish_transaction() logging.info("Closing Database...") if app.db is not None: app.db.close() signals.system.shutdown()
def handle_close(self, type_): if self.shutdown: return logging.info("downloader: quitting") self.shutdown = True eventloop.shutdown() from miro.dl_daemon import download download.shutdown() logging.info("Cleaning up libcurl") httpclient.stop_thread() httpclient.cleanup_libcurl() import threading for thread in threading.enumerate(): if thread != threading.currentThread() and not thread.isDaemon(): logging.info("joining with %s", thread) thread.join() logging.info("handle_close() done")
def handle_close(self, type_): if self.shutdown: return logging.info("downloader: quitting") self.shutdown = True eventloop.shutdown() logging.info("Cleaning up libcurl") httpclient.stop_thread() httpclient.cleanup_libcurl() from miro.dl_daemon import download download.shutdown() import threading for thread in threading.enumerate(): if thread != threading.currentThread() and not thread.isDaemon(): logging.info("joining with %s", thread) thread.join() logging.info("handle_close() done")
def action(self): starttime = time.time() from miro import httpclient from miro.dl_daemon import download download.shutdown() httpclient.stop_thread() eventloop.thread_pool_quit() for thread in threading.enumerate(): if (thread != threading.currentThread() and thread.getName() != "MainThread" and not thread.isDaemon()): thread.join() endtime = starttime + DAEMONIC_THREAD_TIMEOUT for thread in threading.enumerate(): if (thread != threading.currentThread() and thread.getName() != "MainThread"): timeout = endtime - time.time() if timeout <= 0: break thread.join(timeout) c = ShutDownResponseCommand(self.daemon) c.send(callback=self.response_sent) self.daemon.shutdown = True