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()