diff --git a/client/djrandom_client/client.py b/client/djrandom_client/client.py index 729e173dc42b6a9e91e6fee3b84ba27fe76d7526..590c584c0ab740b8a8b18af1f7482f39a10e612b 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 e2c77367aedc2640bc24e989a0223c3ce86e0d9f..d3116a3164bac797c91308b14c1c61f4642db1da 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()