ponyorm / pony

Pony Object Relational Mapper
Apache License 2.0
3.63k stars 245 forks source link

include code object id into extractors cache key #677

Open elmjag opened 1 year ago

elmjag commented 1 year ago

When caching function's extractors use more stable key into the extractors_cache.

The id() of function object is not nessesary unique, as CPython may re-use same memory in case function object is un-referenced. This situation happens when Database objects are dynamically created and destored in the same process.

If a new different function object function is instantiated at the old address, we'll get wrong entry from extractors_cache.

The function's code object id() is more stable. By including code object id() into the cache key this issue is solved.

Solves: https://github.com/ponyorm/pony/issues/675