Hello,

The sample code is attached. It segfaults at pickle.dump().
However, pickling something like QByteArray("asdf") works fine.
This is with python 3. The exact same code works with python 2
(same pyqt, sip and qt versions).

A backtrace is also attached. I see a lot of "<optimized out>" in the
backtrace - should I recompile python and/or sip with -O0 or something
like that?

Python 3 version: 3.2.2
Python 2 version: 2.7.2
Pyqt     version: 4.8.6
Sip      version: 4.13
Qt       version: 4.7.4

Operating system: 64 bit arch linux.

--
cantabile

"Jayne is a girl's name." -- River
#!/usr/bin/env python3

from PyQt4.QtGui import *
from PyQt4.QtCore import *
import pickle

img = QImage("some-image.png")
tmp_bytearray = QByteArray()
tmp_buffer = QBuffer(tmp_bytearray)
tmp_buffer.open(QIODevice.WriteOnly)
img.save(tmp_buffer, "png")
tmp_buffer.close()
f = open("pickle-test", "wb")
pickle.dump(tmp_bytearray, f)
f.close()
f = open("pickle-test", "rb")
another_bytearray = QByteArray()
another_bytearray = pickle.load(f)
f.close()
another_img = QImage()
another_img.loadFromData(another_bytearray, "png")
another_img.save("pickle-test.png", "png")
Program received signal SIGSEGV, Segmentation fault.
pickle_type (obj=<optimized out>, ignore=<optimized out>) at siplib.c:5732
5732                        if (!PyTuple_Check(init_args))
(gdb) bt
#0  pickle_type (obj=<optimized out>, ignore=<optimized out>) at siplib.c:5732
#1  0x00007ffff7a28916 in PyObject_Call (func=0x7ffff0c4b8c0, 
arg=0x7ffff7f8f050, kw=<optimized out>) at Objects/abstract.c:2149
#2  0x00007ffff7aaf7c7 in PyEval_CallObjectWithKeywords (func=0x7ffff0c4b8c0, 
arg=0x7ffff7f8f050, kw=<optimized out>) at Python/ceval.c:3801
#3  0x00007ffff7a6ec4b in object_reduce_ex (self=0x7ffff0cb2280, 
args=<optimized out>) at Objects/typeobject.c:3342
#4  0x00007ffff7a28916 in PyObject_Call (func=0x7ffff0c4b878, 
arg=0x7ffff0c94dd0, kw=<optimized out>) at Objects/abstract.c:2149
#5  0x00007ffff0819ba4 in _Pickler_FastCall (func=0x7ffff0c4b878, 
arg=<optimized out>, self=<optimized out>)
    at /home/asdf/builds/python/src/Python-3.2.2/Modules/_pickle.c:656
#6  0x00007ffff081eff0 in save (self=0x7ffff0cd5958, obj=0x7ffff0cb2280, 
pers_save=<optimized out>)
    at /home/asdf/builds/python/src/Python-3.2.2/Modules/_pickle.c:3186
#7  0x00007ffff082030f in dump (self=0x7ffff0cd5958, obj=0x7ffff0cb2280) at 
/home/asdf/builds/python/src/Python-3.2.2/Modules/_pickle.c:3250
#8  0x00007ffff0820529 in pickle_dump (self=<optimized out>, args=<optimized 
out>, kwds=<optimized out>)
    at /home/asdf/builds/python/src/Python-3.2.2/Modules/_pickle.c:5967
#9  0x00007ffff7ab6e3d in call_function (oparg=<optimized out>, 
pp_stack=0x7fffffffe2c8) at Python/ceval.c:3921
#10 PyEval_EvalFrameEx (f=<optimized out>, throwflag=<optimized out>) at 
Python/ceval.c:2692
#11 0x00007ffff7ab80b6 in PyEval_EvalCodeEx (_co=<optimized out>, 
globals=<optimized out>, locals=<optimized out>, args=<optimized out>, 
argcount=0, kws=0x0,
    kwcount=0, defs=0x0, defcount=0, kwdefs=0x0, closure=0x0) at 
Python/ceval.c:3350
#12 0x00007ffff7ab832b in PyEval_EvalCode (co=<optimized out>, 
globals=<optimized out>, locals=<optimized out>) at Python/ceval.c:767
#13 0x00007ffff7ad4081 in run_mod (mod=<optimized out>, filename=<optimized 
out>, globals=0x66a800, locals=0x66a800, flags=<optimized out>,
    arena=<optimized out>) at Python/pythonrun.c:1783
#14 0x00007ffff7ad5de8 in PyRun_FileExFlags (fp=0x6e31d0, 
filename=0x7ffff7ea6770 "pickle-test.py", start=<optimized out>, 
globals=0x66a800, locals=0x66a800,
    closeit=1, flags=0x7fffffffe630) at Python/pythonrun.c:1740
#15 0x00007ffff7ad69d9 in PyRun_SimpleFileExFlags (fp=0x6e31d0, 
filename=0x7ffff7ea6770 "pickle-test.py", closeit=1, flags=0x7fffffffe630)
    at Python/pythonrun.c:1265
#16 0x00007ffff7ae84fd in run_file (p_cf=0x7fffffffe630, filename=0x6290c0 
L"pickle-test.py", fp=0x6e31d0) at Modules/main.c:297
#17 Py_Main (argc=<optimized out>, argv=<optimized out>) at Modules/main.c:692
#18 0x00000000004009b2 in main (argc=3, argv=0x7fffffffe798) at 
./Modules/python.c:59
(gdb) quit
_______________________________________________
PyQt mailing list    PyQt@riverbankcomputing.com
http://www.riverbankcomputing.com/mailman/listinfo/pyqt

Reply via email to