HEX
Server: LiteSpeed
System: Linux ip-172-31-76-142.ec2.internal 4.14.158-129.185.amzn2.x86_64 #1 SMP Tue Dec 24 03:15:32 UTC 2019 x86_64
User: 69b4844ae61d4e92bf26ad98af552775 (1065)
PHP: 7.2.27
Disabled: exec,passthru,shell_exec,system,eval
Upload Files
File: //usr/lib64/python2.7/site-packages/cffi/gc_weakref.py
from weakref import ref


class GcWeakrefs(object):
    def __init__(self, ffi):
        self.ffi = ffi
        self.data = {}

    def build(self, cdata, destructor):
        # make a new cdata of the same type as the original one
        new_cdata = self.ffi.cast(self.ffi._backend.typeof(cdata), cdata)
        #
        def remove(key):
            # careful, this function is not protected by any lock
            old_key = self.data.pop(index)
            assert old_key is key
            destructor(cdata)
        #
        key = ref(new_cdata, remove)
        index = object()
        self.data[index] = key
        return new_cdata