segfault with small pyqt script

Gelonida gelonida at gmail.com
Thu Aug 12 01:14:26 CEST 2010


Jusy FYI:

I made further tests and can crash the python script even if I delete
the linesassigning strings  to variables a to f

On 08/12/2010 01:07 AM, Gelonida wrote:
> 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:
> gelonida at mypc:/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
> 
> 
> 
> 
> 
> 





More information about the Python-list mailing list