[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    Re: KDE/kdelibs/khtml
From:       David Faure <faure () kde ! org>
Date:       2008-02-01 0:07:22
Message-ID: 200802010107.24898.faure () kde ! org
[Download RAW message or body]

On Friday 01 February 2008, Aurélien Gâteau wrote:
> David Faure a écrit :
> > On Sunday 13 January 2008, Aurélien Gâteau wrote:
> >> Le Monday 07 January 2008 02:07:41, vous avez écrit :
> >>> On Monday 07 January 2008, David Faure wrote:
> >>>> On Sunday 06 January 2008, Aurélien Gâteau wrote:
> >>>>> SVN commit 757890 by gateau:
> >>>>>
> >>>>> Fix crashing when processObjectRequest() opens a dialog.
> >>>>> For example when visiting netvibes.com
> >>>>>
> >>>>>
> >>>>>  M  +8 -1      khtml_run.cpp
> >>>>>
> >>>>>
> >>>>> --- trunk/KDE/kdelibs/khtml/khtml_run.cpp #757889:757890
> >>>>> @@ -50,7 +50,14 @@
> >>>>>  {
> >>>>>      Q_ASSERT(!hasFinished());
> >>>>>      QString mimeType = _type; // this ref comes from the job, we lose
> >>>>> it when using KIO again -    if ( static_cast<KHTMLPart
> >>>>> *>(part())->processObjectRequest( m_child, KRun::url(), mimeType ) ) +
> >>>>> +    // Disable autoDelete for processObjectRequest, because it may
> >>>>> open a +    // dialog
> >>>>> +    bool autoDeleteWasEnabled = autoDelete();
> >>>>> +    setAutoDelete( false );
> >>>>> +    bool requestProcessed = static_cast<KHTMLPart
> >>>>> *>(part())->processObjectRequest( m_child, KRun::url(), mimeType ); +  
> >>>>>  setAutoDelete( autoDeleteWasEnabled );
> >>>>> +    if ( requestProcessed )
> >>>>>          setFinished( true );
> >>>>>      else {
> >>>>>          if ( hasFinished() ) // abort was called (this happens with
> >>>>> the activex fallback for instance)
> >>>> The problem is that now the KHTMLRun is leaking, since the timer (inside
> >>>> krun) isn't launched again by setFinished. You probably need a
> >>>> timer().start(0). Won't change anything if there was no message box, and
> >>>> will trigger the autodeletion if there was one.
> >>> In fact this means that the above fix could be written in a simpler way...
> >>>
> >>> timer().stop();
> >>> bool requestProcessed = static_cast<KHTMLPart
> >>> *>(part())->processObjectRequest( m_child, KRun::url(), mimeType );
> >>> timer().start(0);
> >>> if ( requestProcessed )
> >> This solution doesn't work: I still get the crash. I didn't investigate really 
> >> closely but I think it's because KRun autodelete timer is started from 
> >> several places. I suspect slotStatResult is the culprit.
> >>
> >> For the same reason, the KRun instance is in fact deleted in the current code 
> >> because the timer is restarted somewhere. Still I agree restarting the timer 
> >> explicitly is safer. Attached patch does this. It also provide better 
> >> comments about this tricky code. Should I commit?
> > 
> > This change introduces regressions like #156447 (because the start(0) is done
> > too early, there's another dialog box in the code below it, handleNonEmbeddable).
> 
> Oh... sorry about that.
> 
> > Reverting your change fixes that page (which doesn't surprise me since the bug
> > doesn't happen in kde3 either - after removing kmidpart to trigger the Open With dialog there as well),
> > so now I wanted to debug the problem that made you create the above fix in 
> > the first place, but I don't know how to do that: "konqueror netvibes.com" 
> > doesn't crash even after reverting your fix.
> 
> Which change are you talking about? the iframe change or the "start the 
> delete timer just in case" change?

The one I quoted above, i.e. the "stop autodelete+timer; show dialog ; set autodelete+restart timer" change.

> The second one was supposed to be safer. If it's worse than without it, 
> it should go.

I think so too.

> As for reproducing the crash I got without any of the patches applied, 
> what I can say is that it didn't crash for me if I set Konqueror to 
> automatically open text/plain files without prompting. With the default 
> settings I had 6 dialog boxes asking me what to do with empty.txt. 
> Closing those dialog boxes caused Konqueror to crash.

OK I'll see if I get a different result after changing the filetypes settings, tomorrow.

-- 
David Faure, faure@kde.org, sponsored by Trolltech to work on KDE,
Konqueror (http://www.konqueror.org), and KOffice (http://www.koffice.org).

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic