cPickle segfault with nested dicts in threaded env

Carl Banks pavlovevidence at gmail.com
Wed Sep 8 22:03:13 CEST 2010


On Sep 8, 11:58 am, Kenneth Dombrowski <kdombrow... at gmail.com> wrote:
> Hi all,
>
> Before creating an issue @ bugs.python.org I wanted to run the
> following by everyone
>
> We are having a difficult time with what looks like a cPickle issue
> when given a data structure containing >15 nested dictionaries, but
> only when threading is involved
>
> Environment is FreeBSD 8, Python 2.5.5

Since Python 2.7 is released, Python 2.5 is no longer accepting bug
fixes, only security fixes.  So be aware.


> The following diff contains an addition for
> /usr/ports/lang/python25/work/Python-2.5.5/Lib/test/test_cpickle.py
> which reproduces the issue
>
> kenneth at kenneth0 Python-2.5.5 $ cat
> /tmp/test_cpickle.nested_dicts_in_threaded_env.diff
> 1a2
>
> > import copy
> 2a4
> > import threading
> 93a96,105
> >     def test_nested_dicts_in_threaded_env(self):
> >         # segfaults on python2.5.5/FreeBSD 8.0-RELEASE-p2
> >         def threadloop():
> >             x = {}
> >             for i in range(16):
> >                 x = {i:copy.copy(x)}
> >             cPickle.dumps(x, 2)
> >         t = threading.Thread(target=threadloop)
> >         t.start()
>
> Any thoughts will be appreciated, thanks for looking,

Bug.  Python should never segfault (unless you're doing bad things
with ctypes).  Even if threading isn't supported in this case, it
should fail with an exception or have undefined behavior, not
segfault.  I would check to see if the same problem exists on 2.7, and
file a bug report if so.  If they fix it in 2.7 maybe you could apply
the same fix to your own 2.5.


Carl Banks



More information about the Python-list mailing list