diff options
author | Tim Peters <tim.peters@gmail.com> | 2003-02-04 21:47:44 (GMT) |
---|---|---|
committer | Tim Peters <tim.peters@gmail.com> | 2003-02-04 21:47:44 (GMT) |
commit | 3e667d5452ce480eee2d4125c1209630e02ac574 (patch) | |
tree | 521455459e6c62ba4c07aa8d698ef2a6654eaa36 /Modules/cPickle.c | |
parent | 5042da6b1e567039951cdfe6b822dd725012bdf1 (diff) | |
download | cpython-3e667d5452ce480eee2d4125c1209630e02ac574.zip cpython-3e667d5452ce480eee2d4125c1209630e02ac574.tar.gz cpython-3e667d5452ce480eee2d4125c1209630e02ac574.tar.bz2 |
cPickle: exempt two_tuple from GC -- it's a speed hack, and doesn't
guarantee to keep valid pointers in its slots.
tests: Moved ExtensionSaver from test_copy_reg into pickletester, and
use it both places. Once extension codes get assigned, it won't be
safe to overwrite them willy nilly in test suites, and ExtensionSaver
does a thorough job of undoing any possible damage.
Beefed up the EXT[124] tests a bit, to check the smallest and largest
codes in each opcode's range too.
Diffstat (limited to 'Modules/cPickle.c')
-rw-r--r-- | Modules/cPickle.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/Modules/cPickle.c b/Modules/cPickle.c index c8b194b..e726220 100644 --- a/Modules/cPickle.c +++ b/Modules/cPickle.c @@ -1946,7 +1946,7 @@ save_global(Picklerobject *self, PyObject *args, PyObject *name) * so generate an EXT opcode. */ PyObject *py_code; /* extension code as Python object */ - long code; /* extensoin code as C value */ + long code; /* extension code as C value */ char c_str[5]; int n; @@ -5280,6 +5280,11 @@ init_stuff(PyObject *module_dict) two_tuple = PyTuple_New(2); if (two_tuple == NULL) return -1; + /* We use this temp container with no regard to refcounts, or to + * keeping containees alive. Exempt from GC, because we don't + * want anything looking at two_tuple() by magic. + */ + PyObject_GC_UnTrack(two_tuple); /* Ugh */ if (!( t=PyImport_ImportModule("__builtin__"))) return -1; |