Skip to content
2 changes: 1 addition & 1 deletion Lib/queue.py
Original file line number Diff line number Diff line change
Expand Up @@ -249,9 +249,9 @@ def shutdown(self, immediate=False):
self._get()
if self.unfinished_tasks > 0:
self.unfinished_tasks -= 1
self.not_empty.notify_all()
# release all blocked threads in `join()`
self.all_tasks_done.notify_all()
self.not_empty.notify_all()
self.not_full.notify_all()

# Override these methods to implement other queue organizations
Expand Down
17 changes: 17 additions & 0 deletions Lib/test/test_queue.py
Original file line number Diff line number Diff line change
Expand Up @@ -636,6 +636,23 @@ def test_shutdown_get_task_done_join(self):

self.assertEqual(results, [True]*len(thrds))

def test_shutdown_get_simple(self):
def get():
try:
results.append(q.get())
except Exception as e:
results.append(e)

q = self.type2test()
results = []
get_thread = threading.Thread(target=get)
get_thread.start()
q.shutdown()
get_thread.join(timeout=0.01)
self.assertFalse(get_thread.is_alive())
self.assertEqual(len(results), 1)
self.assertIsInstance(results[0], self.queue.ShutDown)


class QueueTest(BaseQueueTestMixin):

Expand Down