code: def test_derived_cycle_dealloc(self):
      # http://bugs.python.org/issue6990
      class Local(self._local):
          pass
  
      locals = None
      passed = False
      e1 = threading.Event()
      e2 = threading.Event()
  
      def f():
          nonlocal passed
          # 1) Involve Local in a cycle
          cycle = [Local()]
          cycle.append(cycle)
          cycle[0].foo = "bar"
  
          # 2) GC the cycle (triggers threadmodule.c::local_clear
          # before local_dealloc)
          del cycle
          support.gc_collect()  # For PyPy or other GCs.
          e1.set()
          e2.wait()
  
          # 4) New Locals should be empty
          passed = all(not hasattr(local, "foo") for local in locals)
  
      t = threading.Thread(target=f)
      t.start()
      e1.wait()
  
      # 3) New Locals should recycle the original's address. Creating
      # them in the thread overwrites the thread state and avoids the
      # bug
      locals = [Local() for i in range(10)]
      e2.set()
      t.join()
  
      self.assertTrue(passed)
  
imports: import sys
  import unittest
  from doctest import DocTestSuite
  from test import support
  from test.support import threading_helper
  from test.support.import_helper import import_module
  import weakref
  import _thread
  import threading
  import _threading_local
label_desc: Use image node_id 4 for calling the BaseLocalTest obj's underlying member method code with example usage: obj.test_derived_cycle_dealloc() without return types