[Kst] Mysterious crash, please help!
Barth Netterfield
barth.netterfield at utoronto.ca
Tue Nov 12 22:07:06 UTC 2013
Here is what I have learned:
The offending call to setStatusMessage occurs from ViewItem::paint()
(down several layers) which is only supposed to be called in response to a
main window update, which is only supposed to happen in the main (GUI)
thread.
All indications are it *is* only happening in the main (GUI) thread.
In fact, the only other threads are the validateDSThread and threads
created by data sources. But I can get the crash with just an empty plot
and no data
objects and no data sources. So it isn't threading.
The setStatusMessage call also happens in the hoverMoveEvent. And it is
just fine from there. No crashes.
If I put in a setStatusMessage("test message") at the end of
ViewItem::paint() (with the processHoverMoveEvent removed) then "test
Message" gets written *over* the status message written in from
hoverMoveEvent(), without erasing it first.
So: it seems that you can't make the call from inside a main window paint
event - which is where paint gets called from. So you can't set the
message from inside ::paint().
Seems like a Qt bug to me, though I can't find any reference to it anywhere
else.
In any case - making sure we delay actually updating the statusMessage
until after the painting is done fixes the problem.
I will push the fix.
cbn
On November 12, 2013 2:09:00 PM Barth Netterfield wrote:
> I'm going to start looking at... right now.
>
> On November 12, 2013 8:06:28 PM Nicolas Brisset wrote:
> > Hi Peter,
> >
> > I tried your suggestion below, but it does not work. I don't get
messages,
> > and it still crashes. Also tried Qt::BlockingQueuedConnection, which
> > raises
> > the following message: Qt: Dead lock detected while activating a
> > BlockingQueuedConnection: Sender is AsciiSource(0x7f3864c72010),
receiver
> > is Kst::MainWindow(0x13b2680)
> >
> > The other problem is that the other places which trigger messages
don't do
> > it with signals but by calling setMessage() directly. What I don't get is
> > why it works to call setText() on a QLabel and not showMessage on the
> > QStatusBar object.
> >
> > Looks like I'm still stuck.
> >
> > Nicolas
> >
> > > You could try to connect all signals to setMessage() with
> > > Qt::QueuedConnection.
> >
> > _______________________________________________
> > Kst mailing list
> > Kst at kde.org
> > https://mail.kde.org/mailman/listinfo/kst
--
Barth Netterfield
University of Toronto
416-845-0946
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.kde.org/pipermail/kst/attachments/20131112/5efd1180/attachment-0001.html>
More information about the Kst
mailing list