Backport of 64903.
diff --git a/Lib/dummy_thread.py b/Lib/dummy_thread.py
index a72c927..fac5720 100644
--- a/Lib/dummy_thread.py
+++ b/Lib/dummy_thread.py
@@ -107,18 +107,15 @@
         aren't triggered and throw a little fit.
 
         """
-        if waitflag is None:
+        if waitflag is None or waitflag:
             self.locked_status = True
-            return None
-        elif not waitflag:
+            return True
+        else:
             if not self.locked_status:
                 self.locked_status = True
                 return True
             else:
                 return False
-        else:
-            self.locked_status = True
-            return True
 
     __enter__ = acquire
 
diff --git a/Lib/test/test_dummy_thread.py b/Lib/test/test_dummy_thread.py
index f274e0a..58faeb4 100644
--- a/Lib/test/test_dummy_thread.py
+++ b/Lib/test/test_dummy_thread.py
@@ -60,6 +60,7 @@
         #Make sure that an unconditional locking returns True.
         self.failUnless(self.lock.acquire(1) is True,
                         "Unconditional locking did not return True.")
+        self.failUnless(self.lock.acquire() is True)
 
     def test_uncond_acquire_blocking(self):
         #Make sure that unconditional acquiring of a locked lock blocks.
diff --git a/Misc/NEWS b/Misc/NEWS
index c5cf068..fa9c9a6 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -59,6 +59,9 @@
 Library
 -------
 
+- Issue #3339: dummy_thread.acquire() could return None which is not a valid
+  return value.
+
 - Issue #3116 and #1792:  Fix quadratic behavior in marshal.dumps().
 
 - Issue #2682: ctypes callback functions no longer contain a cyclic