segfault with small pyqt script


G

Gelonida

Hi Guys,
I'm desperate. I'm having a real application, which fails rather often
when finishing it. I'm not sure, whether any serious problem could be
hidden behind it

The script is a pyqt script, which segfaults most of the time on my
ubuntu 10.4 linux 64 bit and I'm having trouble to understand why.

Trying to create the smallest possible test case I ended up with
following script, which I named dodo.py and which i made executable with
chmod +x ./dodo.py

#!/usr/bin/env python
from PyQt4.QtGui import
QDialog,QGridLayout,QLabel,QComboBox,QPushButton,QApplication
a = "one"
b = "unused"
c = "also unused"
d= "ans also unused"
e = "another var"
f = "something"
class MyForm(QDialog):
def __init__(self,parent=None,config=None,ini_info=None):
super(MyForm,self).__init__(parent=parent)
grid = QGridLayout()
quit_btn = QPushButton("Quit")
quit_btn.clicked.connect(self.quit)
grid.addWidget(quit_btn,0,0)
name = "a_name"
vals_box = QComboBox()
vals_box.addItem("one")
vals_box.addItem("two")
grid.addWidget(vals_box,0,1)
self.setLayout(grid)
def quit(self):
self.close()
if __name__ == "__main__":
app = QApplication([])
myform = MyForm()
myform.show()
retcode = app.exec_()
print "last"



In order to perform the test several times I typed on the command line:

a="" ; while [ "$a" = "" ] ; do ./dodo.py ; read -t 1 a ; done

As soon as the window shows up
I click twice (slowly ) on 'one' and then on quit.

Sample output can be seen here:
[email protected]:/my/directory$ a="" ; while [ "$a" = "" ] ; do ./dodo.py ;
read -t 1 a ; done
last
last
Segmentation fault
last
last
Segmentation fault
last
Segmentation fault
last
Segmentation fault
last
last
last
last
last
Segmentation fault
last
last
Segmentation fault
last
Segmentation fault


as you see the segfault happens rather often.

Does anybody see something suspicious with my code?
Can anybody else reproduce this?
as soon as I remove more lines the error seems to disappear.

What else could I do to debug this issue?

thanks for help or other ideas



If I run my script with strace ./dodo.py
I get following last lines for a run without error
rt_sigaction(SIGINT, {SIG_DFL, [], SA_RESTORER, 0x7f65d6b3b8f0}, {0x4d9820, [], SA_RESTORER, 0x7f65d6b3b8f0}, 8) = 0
munmap(0x7f65c6344000, 622280) = 0
brk(0x2d71000) = 0x2d71000
poll([{fd=7, events=POLLIN|POLLOUT}], 1, -1) = 1 ([{fd=7, revents=POLLIN|POLLOUT}])
read(7, "\22\0\233\6\2\0\300\5\2\0\300\5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 384
writev(7, [{"\232\7\2\0\210\0\300\0056\0\2\0\207\0\300\5<\0\2\0\211\0\300\5\232\7\2\0s\0\300\5"..., 540}, {NULL, 0}, {"", 0}], 3) = 540
poll([{fd=7, events=POLLIN}], 1, -1) = 1 ([{fd=7, revents=POLLIN}])
read(7, "\34\0\241\6r\0\300\5\234\1\0\0\377\261\220\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 1472
read(7, 0x29fa704, 4096) = -1 EAGAIN (Resource temporarily unavailable)
poll([{fd=7, events=POLLIN|POLLOUT}], 1, -1) = 1 ([{fd=7, revents=POLLOUT}])
writev(7, [{"O\7\2\0\1\0\300\5<\0\2\0\0\0\300\5+\0\1\0", 20}, {NULL, 0}, {"", 0}], 3) = 20
poll([{fd=7, events=POLLIN}], 1, -1) = 1 ([{fd=7, revents=POLLIN}])
read(7, "\1\2\333\6\0\0\0\0\5\0\300\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", 4096) = 32
read(7, 0x29fa704, 4096) = -1 EAGAIN (Resource temporarily unavailable)
close(7) = 0
write(19, "\1\v\3\200\1\0\0\0\0\0\0\0\t\0\0\0", 16) = 16
close(19) = 0
open("/proc/stat", O_RDONLY|O_CLOEXEC) = 7
read(7, "cpu 59482 54 13580 7506040 4761"..., 8192) = 2439
close(7) = 0
writev(15, [{"GIOP\1\2\1\5\0\0\0\0", 12}], 1) = 12
close(15) = 0
writev(13, [{"GIOP\1\2\1\5\0\0\0\0", 12}], 1) = 12
close(13) = 0
close(12) = 0
close(11) = 0
unlink("/tmp/orbit-klausf/linc-1282-0-6094bc6991603") = 0
close(14) = 0
write(6, "@", 1) = 1
close(6) = 0
close(5) = 0
rt_sigaction(SIGCHLD, {SIG_DFL, [], SA_RESTORER|SA_NOCLDSTOP, 0x7f65d6b3b8f0}, {0x7f65d40a3860, [], SA_RESTORER|SA_NOCLDSTOP, 0x7f65d6b3b8f0}, 8) = 0
exit_group(0)


and following when an error occurs:
writev(16, [{"<\10\2\0;\6\340\5F\6\5\0!\6\340\5\10\0\340\5\0\0\0\0U\0\33\0\232\7\2\0"..., 16380}, {NULL, 0}, {"", 0}], 3) = 16380
read(16, 0xbc49d4, 4096) = -1 EAGAIN (Resource temporarily unavailable)
poll([{fd=16, events=POLLIN|POLLOUT}], 1, -1) = 1 ([{fd=16, revents=POLLOUT}])
writev(16, [{"\232\10\t\0\3\6\340\5R\6\340\5C\6\340\5=\6\340\5\0\0\0\0\0\0\0\0\2\0\2\0"..., 4256}, {NULL, 0}, {"", 0}], 3) = 4256
poll([{fd=16, events=POLLIN}], 1, -1) = 1 ([{fd=16, revents=POLLIN}])
read(16, "\16\0\317\26s\0\340\5\0\0>\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 64
read(16, 0xbc49d4, 4096) = -1 EAGAIN (Resource temporarily unavailable)
poll([{fd=7, events=POLLIN|POLLOUT}], 1, -1) = 1 ([{fd=7, revents=POLLOUT}])
writev(7, [{"7\0\4\0\25\1\300\5\v\0\300\5\0\0\0\0007\1\4\0\26\1\300\5\v\0\300\5\0\0\0\0"..., 9940}, {NULL, 0}, {"", 0}], 3) = 9940
read(7, 0xb44704, 4096) = -1 EAGAIN (Resource temporarily unavailable)
read(7, 0xb44704, 4096) = -1 EAGAIN (Resource temporarily unavailable)
read(7, 0xb44704, 4096) = -1 EAGAIN (Resource temporarily unavailable)
poll([{fd=3, events=POLLIN}, {fd=11, events=POLLIN|POLLPRI}, {fd=13, events=POLLIN|POLLPRI}, {fd=14, events=POLLIN|POLLPRI}, {fd=15, events=POLLIN|POLLPRI}, {fd=16, events=POLLIN}, {fd=17, events=POLLIN}, {fd=18, events=POLLIN}, {fd=19, events=POLLIN}, {fd=7, events=POLLIN}], 10, 0) = 0 (Timeout)
read(7, 0xb44704, 4096) = -1 EAGAIN (Resource temporarily unavailable)
fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fb00bc75000
write(1, "last\n", 5last
) = 5
rt_sigaction(SIGINT, {SIG_DFL, [], SA_RESTORER, 0x7fb0124088f0}, {0x4d9820, [], SA_RESTORER, 0x7fb0124088f0}, 8) = 0
--- SIGSEGV (Segmentation fault) @ 0 (0) ---
+++ killed by SIGSEGV +++
Segmentation fault




thanks a lot for any ideas or explanations
 
Ad

Advertisements


Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top