X7ROOT File Manager
Current Path:
/opt/hc_python/lib/python3.12/site-packages/greenlet/tests
opt
/
hc_python
/
lib
/
python3.12
/
site-packages
/
greenlet
/
tests
/
ðŸ“
..
📄
__init__.py
(9.14 KB)
ðŸ“
__pycache__
📄
_test_extension.c
(5.64 KB)
📄
_test_extension.cpython-312-x86_64-linux-gnu.so
(16.85 KB)
📄
_test_extension_cpp.cpp
(6.41 KB)
📄
_test_extension_cpp.cpython-312-x86_64-linux-gnu.so
(57.02 KB)
📄
fail_clearing_run_switches.py
(1.23 KB)
📄
fail_cpp_exception.py
(985 B)
📄
fail_initialstub_already_started.py
(1.92 KB)
📄
fail_slp_switch.py
(524 B)
📄
fail_switch_three_greenlets.py
(956 B)
📄
fail_switch_three_greenlets2.py
(1.25 KB)
📄
fail_switch_two_greenlets.py
(817 B)
📄
leakcheck.py
(11.68 KB)
📄
test_contextvars.py
(10.29 KB)
📄
test_cpp.py
(2.67 KB)
📄
test_extension_interface.py
(3.74 KB)
📄
test_gc.py
(2.85 KB)
📄
test_generator.py
(1.21 KB)
📄
test_generator_nested.py
(3.63 KB)
📄
test_greenlet.py
(45.17 KB)
📄
test_greenlet_trash.py
(7.76 KB)
📄
test_leaks.py
(17.3 KB)
📄
test_stack_saved.py
(446 B)
📄
test_throw.py
(3.63 KB)
📄
test_tracing.py
(8.06 KB)
📄
test_version.py
(1.31 KB)
📄
test_weakref.py
(883 B)
Editing: test_gc.py
import gc import weakref import greenlet from . import TestCase from .leakcheck import fails_leakcheck # These only work with greenlet gc support # which is no longer optional. assert greenlet.GREENLET_USE_GC class GCTests(TestCase): def test_dead_circular_ref(self): o = weakref.ref(greenlet.greenlet(greenlet.getcurrent).switch()) gc.collect() if o() is not None: import sys print("O IS NOT NONE.", sys.getrefcount(o())) self.assertIsNone(o()) self.assertFalse(gc.garbage, gc.garbage) def test_circular_greenlet(self): class circular_greenlet(greenlet.greenlet): self = None o = circular_greenlet() o.self = o o = weakref.ref(o) gc.collect() self.assertIsNone(o()) self.assertFalse(gc.garbage, gc.garbage) def test_inactive_ref(self): class inactive_greenlet(greenlet.greenlet): def __init__(self): greenlet.greenlet.__init__(self, run=self.run) def run(self): pass o = inactive_greenlet() o = weakref.ref(o) gc.collect() self.assertIsNone(o()) self.assertFalse(gc.garbage, gc.garbage) @fails_leakcheck def test_finalizer_crash(self): # This test is designed to crash when active greenlets # are made garbage collectable, until the underlying # problem is resolved. How does it work: # - order of object creation is important # - array is created first, so it is moved to unreachable first # - we create a cycle between a greenlet and this array # - we create an object that participates in gc, is only # referenced by a greenlet, and would corrupt gc lists # on destruction, the easiest is to use an object with # a finalizer # - because array is the first object in unreachable it is # cleared first, which causes all references to greenlet # to disappear and causes greenlet to be destroyed, but since # it is still live it causes a switch during gc, which causes # an object with finalizer to be destroyed, which causes stack # corruption and then a crash class object_with_finalizer(object): def __del__(self): pass array = [] parent = greenlet.getcurrent() def greenlet_body(): greenlet.getcurrent().object = object_with_finalizer() try: parent.switch() except greenlet.GreenletExit: print("Got greenlet exit!") finally: del greenlet.getcurrent().object g = greenlet.greenlet(greenlet_body) g.array = array array.append(g) g.switch() del array del g greenlet.getcurrent() gc.collect()
Upload File
Create Folder