Fix potential resource leaks in concurrent.futures.ProcessPoolExecutor
by joining all queues and processes when shutdown() is called.
diff --git a/Lib/concurrent/futures/process.py b/Lib/concurrent/futures/process.py
index 41e1320..7c22a62 100644
--- a/Lib/concurrent/futures/process.py
+++ b/Lib/concurrent/futures/process.py
@@ -209,6 +209,8 @@
         # some multiprocessing.Queue methods may deadlock on Mac OS X.
         for p in processes.values():
             p.join()
+        # Release resources held by the queue
+        call_queue.close()
 
     while True:
         _add_call_item_to_queue(pending_work_items,
@@ -246,7 +248,8 @@
             # Clean shutdown of a worker using its PID
             # (avoids marking the executor broken)
             assert shutting_down()
-            del processes[result_item]
+            p = processes.pop(result_item)
+            p.join()
             if not processes:
                 shutdown_worker()
                 return