Your message dated Mon, 22 Sep 2008 23:52:23 +0200
with message-id <[EMAIL PROTECTED]>
and subject line Read the relevant part of the Qt documentation to understand 
the restrictions imposed by the Qt API.
has caused the Debian Bug report #490340,
regarding [python-qt3] segfaults when calling QTextBrowser.setText()
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact [EMAIL PROTECTED]
immediately.)


-- 
490340: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=490340
Debian Bug Tracking System
Contact [EMAIL PROTECTED] with problems
--- Begin Message ---
Package: python-qt3
Version: 3.17.4-1
Severity: grave

--- Please enter the report below this line. ---
Hi,

since two weeks reportbug-ng, which uses python-qt3, segfaults very often. I've investigated the problem and think the problem comes from the qt3-bindings or some of it's underlying libs.

The problem appears very often when reportbug-ng tries to show a bugreport in it's internal browser via

  QTextBrowser.setText(somehtml)

I've tried to get more info via gdb. Here is a typical stack trace:

(gdb) run /usr/bin/rng
Starting program: /usr/bin/python-dbg /usr/bin/rng
[Thread debugging using libthread_db enabled]
[New Thread 0xb7d7d8c0 (LWP 22913)]
[New Thread 0xb63bdb90 (LWP 22921)]
[Thread 0xb63bdb90 (LWP 22921) exited]
[New Thread 0xb63bdb90 (LWP 22925)]
[Thread 0xb63bdb90 (LWP 22925) exited]
[New Thread 0xb63bdb90 (LWP 22929)]

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0xb63bdb90 (LWP 22929)]
0xb6e8c1fd in QFontMetrics::lineSpacing () from /usr/lib/libqt-mt.so.3
(gdb) bt
#0  0xb6e8c1fd in QFontMetrics::lineSpacing () from /usr/lib/libqt-mt.so.3
#1  0xb6f4ec07 in QTextFormat::applyFont () from /usr/lib/libqt-mt.so.3
#2  0xb6f1773c in QTextFormat::width () from /usr/lib/libqt-mt.so.3
#3  0xb6f2708d in QTextString::width () from /usr/lib/libqt-mt.so.3
#4 0xb6f27685 in QTextFormatterBreakWords::format () from /usr/lib/libqt-mt.so.3
#5  0xb6f1a57e in QTextParagraph::format () from /usr/lib/libqt-mt.so.3
#6  0xb7020047 in QTextEdit::formatMore () from /usr/lib/libqt-mt.so.3
#7  0xb702b7d3 in QTextEdit::setText () from /usr/lib/libqt-mt.so.3
#8  0xb701d16d in QTextBrowser::setText () from /usr/lib/libqt-mt.so.3
#9 0xb7693359 in sipQTextBrowser::setText (this=0x949d458, [EMAIL PROTECTED], [EMAIL PROTECTED]) at sipqtpart5.cpp:2493 #10 0xb7697385 in QTextBrowser::setText (this=0x949d458, [EMAIL PROTECTED]) at /usr/share/qt3/include/qtextbrowser.h:74 #11 0xb7683e8d in meth_QTextBrowser_setText (sipSelf=0x942dadc, sipArgs=0x9433bcc) at sipqtpart5.cpp:9944 #12 0x081499c2 in PyCFunction_Call (func=0x9437c3c, arg=0x9433bcc, kw=0x0) at ../Objects/methodobject.c:73 #13 0x080ec2de in call_function (pp_stack=0xb63bcf04, oparg=1) at ../Python/ceval.c:3573 #14 0x080e7adf in PyEval_EvalFrameEx (f=0x94e6e94, throwflag=0) at ../Python/ceval.c:2272 #15 0x080e9fb8 in PyEval_EvalCodeEx (co=0x904f5c8, globals=0x9046e94, locals=0x0, args=0x942a0b8, argcount=2, kws=0x0, kwcount=0, defs=0x0, defcount=0, closure=0x0) at ../Python/ceval.c:2836 #16 0x081490fe in function_call (func=0x940fe44, arg=0x942a0a4, kw=0x0) at ../Objects/funcobject.c:517 #17 0x080625c9 in PyObject_Call (func=0x940fe44, arg=0x942a0a4, kw=0x0) at ../Objects/abstract.c:1861 #18 0x0806b93d in instancemethod_call (func=0x940fe44, arg=0x942a0a4, kw=0x0) at ../Objects/classobject.c:2519 #19 0x080625c9 in PyObject_Call (func=0x9661634, arg=0x942a654, kw=0x0) at ../Objects/abstract.c:1861 #20 0x080ebaec in PyEval_CallObjectWithKeywords (func=0x9661634, arg=0x942a654, kw=0x0) at ../Python/ceval.c:3442 #21 0x0812200d in t_bootstrap (boot_raw=0x95fc168) at ../Modules/threadmodule.c:424
#22 0xb7f0e4b0 in start_thread () from /lib/i686/cmov/libpthread.so.0
#23 0xb7e5e38e in clone () from /lib/i686/cmov/libc.so.6


I noticed that almost everytime something about Fonts is in the very first line, like QFontMetrics::width() or ::lineSpacing() or something.

I also noticed that this happens almost only when html text is involved. If I just provide plain text, the segfaults are very rare.

I've attached a small script where you can test it your self. Start it with some text (html or plain) as parameter:

  python crash.py "some text"
  python crash.py "<b>some evil text</b>

while the first call will crash very seldom, the second one should cause a segfault roughly every second time you call it.

I've set the severity to grave since it causes other programs to crash. I could be possible, that not python-qt3 but one if it's underlying libs is the problem but I'm not sure, so I'm assigning it to your package. I've already asked on d-devel and someone pointed out that this problem could be related to the new GCC version and some optimization flags. I've already build python-qt3 with -g -O0 but without success.


Cheers,

Bastian

--- System information. ---
Architecture: i386
Kernel:       Linux 2.6.25-2-686

Debian Release: lenny/sid
  500 unstable        ftp.de.debian.org
    1 unstable        www.debian-multimedia.org

--- Package information. ---
Depends            (Version) | Installed
============================-+-=============
libc6             (>= 2.7-1) | 2.7-12
libgcc1         (>= 1:4.2.1) | 1:4.3.1-6
libqt3-mt       (>= 3:3.3.7) | 3:3.3.8b-5
libstdc++6        (>= 4.2.1) | 4.3.1-6
libx11-6                     | 2:1.1.4-2
libxext6                     | 2:1.0.4-1
python              (<< 2.6) | 2.5.2-1
python              (>= 2.4) | 2.5.2-1
python-sip4         (<= 4.8) | 4.7.6-1
python-sip4         (>= 4.7) | 4.7.6-1

from qt import *
import sys
import threading

class Form(QMainWindow):
    def __init__(self,parent = None,name = None,fl = 0):
        QMainWindow.__init__(self,parent,name,fl)
        self.browser = QTextBrowser(self, "browser")
        self.setCentralWidget(self.browser)

if __name__ == '__main__':
    if len(sys.argv) < 2:
        print 'Usage: %s "some text"' % sys.argv[0]
        sys.exit()
    s = str(sys.argv[1])
    
    # setup qt stuff with a browser
    app = QApplication(sys.argv)
    app.connect(app, SIGNAL("lastWindowClosed()"), app, SLOT("quit()"))
    form = Form()
    app.setMainWidget(form)
    form.show()
   
    # start a different thread and try to set the text in the browser
    # we wait 1.0 second -- just to make sure the change happens after the
    # start of app.exec_loop() below
    t = threading.Timer(1.0, form.browser.setText, (s, ))
    t.start()
    
    app.exec_loop()
    

--- End Message ---
--- Begin Message ---
Hi,

well, we have now quoted everything from the "Support for Threads"
paragraph but

> (Read the relevant part of the Qt documentation to understand the
> restrictions imposed by the Qt API.)

directly following Felipe's quote.

As such, the behaviour is a bug in qt about thread safety if any at all,
so I'm closing this.

Kind regards

T.
-- 
Thomas Viehmann, http://thomas.viehmann.net/


--- End Message ---

Reply via email to