Made thread joins interruptible by specifying a timeout (fixes #25)
diff --git a/CHANGES b/CHANGES
index 86fcfa6..d18b204 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,9 @@
+3.0.4
+=====
+
+- Fixed inability to forcibly terminate the process if there are pending workers
+
+
 3.0.3
 =====
 
diff --git a/concurrent/futures/process.py b/concurrent/futures/process.py
index 665da8e..812552b 100644
--- a/concurrent/futures/process.py
+++ b/concurrent/futures/process.py
@@ -77,7 +77,7 @@
     for t, q in items:
         q.put(None)
     for t, q in items:
-        t.join()
+        t.join(sys.maxint)
 
 # Controls how many more calls than processes will be queued in the call queue.
 # A smaller number will mean that processes spend more time idle waiting for
@@ -232,7 +232,7 @@
                 # some multiprocessing.Queue methods may deadlock on Mac OS
                 # X.
                 for p in processes:
-                    p.join()
+                    p.join(sys.maxint)
                 call_queue.close()
                 return
         del executor
@@ -347,7 +347,7 @@
             # Wake up queue management thread
             self._result_queue.put(None)
             if wait:
-                self._queue_management_thread.join()
+                self._queue_management_thread.join(sys.maxint)
         # To reduce the risk of openning too many files, remove references to
         # objects that use file descriptors.
         self._queue_management_thread = None
diff --git a/concurrent/futures/thread.py b/concurrent/futures/thread.py
index cee65d0..85ab4b7 100644
--- a/concurrent/futures/thread.py
+++ b/concurrent/futures/thread.py
@@ -36,7 +36,7 @@
     for t, q in items:
         q.put(None)
     for t, q in items:
-        t.join()
+        t.join(sys.maxint)
 
 atexit.register(_python_exit)
 
@@ -130,5 +130,5 @@
             self._work_queue.put(None)
         if wait:
             for t in self._threads:
-                t.join()
+                t.join(sys.maxint)
     shutdown.__doc__ = _base.Executor.shutdown.__doc__
diff --git a/setup.py b/setup.py
index 0e4524b..dfad9f4 100755
--- a/setup.py
+++ b/setup.py
@@ -1,4 +1,11 @@
 #!/usr/bin/env python
+from warnings import warn
+import sys
+
+if sys.version_info[0] > 2:
+    warn('This backport is meant only for Python 2.\n'
+         'Python 3 users do not need it, as the concurrent.futures '
+         'package is available in the standard library.')
 
 extras = {}
 try:
@@ -8,7 +15,7 @@
     from distutils.core import setup
 
 setup(name='futures',
-      version='3.0.3',
+      version='3.0.4',
       description='Backport of the concurrent.futures package from Python 3.2',
       author='Brian Quinlan',
       author_email='brian@sweetapp.com',