diff --git a/Lib/test/test_poll.py b/Lib/test/test_poll.py
index 55294f8..219fa0e 100644
--- a/Lib/test/test_poll.py
+++ b/Lib/test/test_poll.py
@@ -1,8 +1,16 @@
 # Test case for the os.poll() function
 
-import os, select, random, unittest
+import os
+import random
+import select
 import _testcapi
-from test.test_support import TESTFN, run_unittest
+try:
+    import threading
+except ImportError:
+    threading = None
+import time
+import unittest
+from test.test_support import TESTFN, run_unittest, reap_threads
 
 try:
     select.poll
@@ -160,6 +168,36 @@
         self.assertRaises(OverflowError, pollster.poll, _testcapi.INT_MAX + 1)
         self.assertRaises(OverflowError, pollster.poll, _testcapi.UINT_MAX + 1)
 
+    @unittest.skipUnless(threading, 'Threading required for this test.')
+    @reap_threads
+    def test_threaded_poll(self):
+        r, w = os.pipe()
+        self.addCleanup(os.close, r)
+        self.addCleanup(os.close, w)
+        rfds = []
+        for i in range(10):
+            fd = os.dup(r)
+            self.addCleanup(os.close, fd)
+            rfds.append(fd)
+        pollster = select.poll()
+        for fd in rfds:
+            pollster.register(fd, select.POLLIN)
+
+        t = threading.Thread(target=pollster.poll)
+        t.start()
+        try:
+            time.sleep(0.5)
+            # trigger ufds array reallocation
+            for fd in rfds:
+                pollster.unregister(fd)
+            pollster.register(w, select.POLLOUT)
+            self.assertRaises(RuntimeError, pollster.poll)
+        finally:
+            # and make the call to poll() from the thread return
+            os.write(w, b'spam')
+            t.join()
+
+
 def test_main():
     run_unittest(PollTests)
 
