[Psi-Devel] Weird crash, could be caused by qt signals blocking thread and event being deleted

Michail Pishchagin mblsha at gmail.com
Wed Jun 11 14:06:37 PDT 2008


On 11.06.2008, at 15:24, Norman Rasmussen wrote:
> Here's one that I didn't expect (this was with rev 1100, so it just  
> _might_ have been fixed by some of the more recent check-ins)
>
> I was busy chatting to someone, and they sent me a message, and psi  
> crashed, the stack was something like:
>
> PsiAccount::queueEvent
> PsiAccount::handleEvent
> PsiAccount::processIncomingMessage
>
> and near the end of queueEvent, at the "e->type() ==  
> PsiEvent::Message" check, e was pointing to 0x00000001.  So my guess  
> is that it could have been deleted at some point in time.
>
> Now is it possible that the event was queued (~15 lines above it's  
> added to eventQueue), and some Qt magic caused the thread to be  
> suspended (I'm thinking either the raiseMainwin - I have raise-on- 
> new-event enabled - or cpUpdate), and then the event was processed  
> elsewhere causing it to be deleted - so that when the thread resumed  
> it was invalid.
>
> For the purposes of testing I skipped the rest of the function, and  
> resumed execution and life continued happily.  I think for the life  
> of me what could have caused this (it's the first time I've ever  
> seen this).

Yeah, very unique indeed. Most crashes I'm hearing of were related to  
frequent reconnects and d->stream calls.

On a sidenote, PsiAccount::queueEvent() function name is entirely  
misleading. Because it actually deletes events (indirectly). I should  
finally put an end to this someday.

-Michail


More information about the Psi-Devel mailing list