diff --git a/Lib/test/test_threading.py b/Lib/test/test_threading.py
index 91f5a8b..dc94603 100644
--- a/Lib/test/test_threading.py
+++ b/Lib/test/test_threading.py
@@ -256,23 +256,31 @@
 
     def test_no_refcycle_through_target(self):
         class RunSelfFunction(object):
-            def __init__(self):
+            def __init__(self, should_raise):
                 # The links in this refcycle from Thread back to self
                 # should be cleaned up when the thread completes.
+                self.should_raise = should_raise
                 self.thread = threading.Thread(target=self._run,
                                                args=(self,),
                                                kwargs={'yet_another':self})
                 self.thread.start()
 
             def _run(self, other_ref, yet_another):
-                pass
+                if self.should_raise:
+                    raise SystemExit
 
-        cyclic_object = RunSelfFunction()
+        cyclic_object = RunSelfFunction(should_raise=False)
         weak_cyclic_object = weakref.ref(cyclic_object)
         cyclic_object.thread.join()
         del cyclic_object
         self.assertEquals(None, weak_cyclic_object())
 
+        raising_cyclic_object = RunSelfFunction(should_raise=True)
+        weak_raising_cyclic_object = weakref.ref(raising_cyclic_object)
+        raising_cyclic_object.thread.join()
+        del raising_cyclic_object
+        self.assertEquals(None, weak_raising_cyclic_object())
+
 
 class ThreadingExceptionTests(unittest.TestCase):
     # A RuntimeError should be raised if Thread.start() is called
diff --git a/Lib/threading.py b/Lib/threading.py
index 2f472b4..005d40c 100644
--- a/Lib/threading.py
+++ b/Lib/threading.py
@@ -442,11 +442,13 @@
         _sleep(0.000001)    # 1 usec, to let the thread run (Solaris hack)
 
     def run(self):
-        if self.__target:
-            self.__target(*self.__args, **self.__kwargs)
-        # Avoid a refcycle if the thread is running a function with an
-        # argument that has a member that points to the thread.
-        del self.__target, self.__args, self.__kwargs
+        try:
+            if self.__target:
+                self.__target(*self.__args, **self.__kwargs)
+        finally:
+            # Avoid a refcycle if the thread is running a function with
+            # an argument that has a member that points to the thread.
+            del self.__target, self.__args, self.__kwargs
 
     def __bootstrap(self):
         # Wrapper around the real bootstrap code that ignores
