GRAYBYTE WORDPRESS FILE MANAGER5323

Server IP : 198.54.121.189 / Your IP : 216.73.216.140
System : Linux premium69.web-hosting.com 4.18.0-553.44.1.lve.el8.x86_64 #1 SMP Thu Mar 13 14:29:12 UTC 2025 x86_64
PHP Version : 7.4.33
Disable Function : NONE
cURL : ON | WGET : ON | Sudo : OFF | Pkexec : OFF
Directory : /opt/hc_python/lib/python3.12/site-packages/greenlet/tests/
Upload Files :
Current_dir [ Not Writeable ] Document_root [ Writeable ]

Command :


Current File : /opt/hc_python/lib/python3.12/site-packages/greenlet/tests//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()

[ Back ]
Name
Size
Last Modified
Owner / Group
Permissions
Options
..
--
May 23 2025 08:31:29
root / root
0755
__pycache__
--
May 23 2025 08:31:29
root / root
0755
__init__.py
9.142 KB
May 23 2025 08:31:29
root / root
0644
_test_extension.c
5.638 KB
May 23 2025 08:31:29
root / root
0644
_test_extension.cpython-312-x86_64-linux-gnu.so
16.852 KB
May 23 2025 08:31:29
root / root
0755
_test_extension_cpp.cpp
6.411 KB
May 23 2025 08:31:29
root / root
0644
_test_extension_cpp.cpython-312-x86_64-linux-gnu.so
57.016 KB
May 23 2025 08:31:29
root / root
0755
fail_clearing_run_switches.py
1.233 KB
May 23 2025 08:31:29
root / root
0644
fail_cpp_exception.py
0.962 KB
May 23 2025 08:31:29
root / root
0644
fail_initialstub_already_started.py
1.915 KB
May 23 2025 08:31:29
root / root
0644
fail_slp_switch.py
0.512 KB
May 23 2025 08:31:29
root / root
0644
fail_switch_three_greenlets.py
0.934 KB
May 23 2025 08:31:29
root / root
0644
fail_switch_three_greenlets2.py
1.255 KB
May 23 2025 08:31:29
root / root
0644
fail_switch_two_greenlets.py
0.798 KB
May 23 2025 08:31:29
root / root
0644
leakcheck.py
11.684 KB
May 23 2025 08:31:29
root / root
0644
test_contextvars.py
10.294 KB
May 23 2025 08:31:29
root / root
0644
test_cpp.py
2.672 KB
May 23 2025 08:31:29
root / root
0644
test_extension_interface.py
3.739 KB
May 23 2025 08:31:29
root / root
0644
test_gc.py
2.854 KB
May 23 2025 08:31:29
root / root
0644
test_generator.py
1.211 KB
May 23 2025 08:31:29
root / root
0644
test_generator_nested.py
3.631 KB
May 23 2025 08:31:29
root / root
0644
test_greenlet.py
45.167 KB
May 23 2025 08:31:29
root / root
0644
test_greenlet_trash.py
7.761 KB
May 23 2025 08:31:29
root / root
0644
test_leaks.py
17.299 KB
May 23 2025 08:31:29
root / root
0644
test_stack_saved.py
0.436 KB
May 23 2025 08:31:29
root / root
0644
test_throw.py
3.625 KB
May 23 2025 08:31:29
root / root
0644
test_tracing.py
8.057 KB
May 23 2025 08:31:29
root / root
0644
test_version.py
1.308 KB
May 23 2025 08:31:29
root / root
0644
test_weakref.py
0.862 KB
May 23 2025 08:31:29
root / root
0644

GRAYBYTE WORDPRESS FILE MANAGER @ 2025
CONTACT ME
Static GIF