From 171cad6ded0852c9d2175fd7eda14c181c1f2497 Mon Sep 17 00:00:00 2001 From: ale <ale@incal.net> Date: Sat, 24 Sep 2011 10:34:44 +0100 Subject: [PATCH] properly sync the database on exit --- client/djrandom_client/client.py | 2 ++ client/djrandom_client/upload.py | 7 +++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/client/djrandom_client/client.py b/client/djrandom_client/client.py index 729e173..590c584 100644 --- a/client/djrandom_client/client.py +++ b/client/djrandom_client/client.py @@ -5,6 +5,7 @@ import optparse import os import platform import signal +import sys import threading import time from djrandom_client import daemonize @@ -72,6 +73,7 @@ def run_client(server_url, music_dir, api_key, run_once, bwlimit): wtch.stop() log.info('got signal %d, exiting...' % signum) upl.stop() + sys.exit(0) signal.signal(signal.SIGINT, _cleanup) signal.signal(signal.SIGTERM, _cleanup) diff --git a/client/djrandom_client/upload.py b/client/djrandom_client/upload.py index e2c7736..d3116a3 100644 --- a/client/djrandom_client/upload.py +++ b/client/djrandom_client/upload.py @@ -38,7 +38,7 @@ class Uploader(object): def __init__(self, server_url, api_key, db=None): self.api_key = api_key self.server_url = server_url - self.queue = Queue.Queue(1000) + self.queue = Queue.Queue(100) self.db = FileDatabase(db) self.opener = urllib2.build_opener(throttle.ThrottledHTTPHandler) socket.setdefaulttimeout(60) @@ -102,5 +102,8 @@ class Uploader(object): self.db.close() def stop(self): - self.queue.put(None) + # We can't put 'None' in the queue and exit cleanly because the + # signal handler might run in the same thread as the 'run()' method, + # causing a deadlock. + self.db.close() -- GitLab