diff options
author | kale-smoothie <34165060+kale-smoothie@users.noreply.github.com> | 2023-11-27 18:09:41 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-11-27 18:09:41 (GMT) |
commit | 967f2a3052c2d22e31564b428a9aa8cc63dc2a9f (patch) | |
tree | fbd778d2136c88978192882f6dbd7376e5ca472a /Modules/_pickle.c | |
parent | 99a73c3465a45fe57cac01a917fc50e0743b5964 (diff) | |
download | cpython-967f2a3052c2d22e31564b428a9aa8cc63dc2a9f.zip cpython-967f2a3052c2d22e31564b428a9aa8cc63dc2a9f.tar.gz cpython-967f2a3052c2d22e31564b428a9aa8cc63dc2a9f.tar.bz2 |
bpo-41422: Visit the Pickler's and Unpickler's memo in tp_traverse (GH-21664)
Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
Diffstat (limited to 'Modules/_pickle.c')
-rw-r--r-- | Modules/_pickle.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/Modules/_pickle.c b/Modules/_pickle.c index a3cf346..227e537 100644 --- a/Modules/_pickle.c +++ b/Modules/_pickle.c @@ -4707,6 +4707,14 @@ Pickler_traverse(PicklerObject *self, visitproc visit, void *arg) Py_VISIT(self->fast_memo); Py_VISIT(self->reducer_override); Py_VISIT(self->buffer_callback); + PyMemoTable *memo = self->memo; + if (memo && memo->mt_table) { + Py_ssize_t i = memo->mt_allocated; + while (--i >= 0) { + Py_VISIT(memo->mt_table[i].me_key); + } + } + return 0; } @@ -7175,6 +7183,13 @@ Unpickler_traverse(UnpicklerObject *self, visitproc visit, void *arg) Py_VISIT(self->stack); Py_VISIT(self->pers_func); Py_VISIT(self->buffers); + PyObject **memo = self->memo; + if (memo) { + Py_ssize_t i = self->memo_size; + while (--i >= 0) { + Py_VISIT(memo[i]); + } + } return 0; } |