bpo-41149: Fix a bug in threading that causes fals-y threads callables to fail to start. (GH-21201)

diff --git a/Lib/test/test_threading.py b/Lib/test/test_threading.py
index 0a4372e..a7a716e 100644
--- a/Lib/test/test_threading.py
+++ b/Lib/test/test_threading.py
@@ -855,6 +855,26 @@ def __del__(self):
         """)
         self.assertEqual(out.rstrip(), b"thread_dict.atexit = 'value'")
 
+    def test_boolean_target(self):
+        # bpo-41149: A thread that had a boolean value of False would not
+        # run, regardless of whether it was callable. The correct behaviour
+        # is for a thread to do nothing if its target is None, and to call
+        # the target otherwise.
+        class BooleanTarget(object):
+            def __init__(self):
+                self.ran = False
+            def __bool__(self):
+                return False
+            def __call__(self):
+                self.ran = True
+
+        target = BooleanTarget()
+        thread = threading.Thread(target=target)
+        thread.start()
+        thread.join()
+        self.assertTrue(target.ran)
+
+
 
 class ThreadJoinOnShutdown(BaseTestCase):