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

List:       pykde
Subject:    Re: [PyKDE] Double free() problem in PyQt 3.15.1??
From:       Jim Bublitz <jbublitz () nwinternet ! com>
Date:       2006-03-12 17:48:18
Message-ID: 200603120948.18981.jbublitz () nwinternet ! com
[Download RAW message or body]

On Sunday 12 March 2006 07:04, Phil Thompson wrote:
> On Sunday 12 March 2006 10:04 am, Simon Edwards wrote:
> > On Saturday 11 March 2006 20:26, Phil Thompson wrote:
> > > On Saturday 11 March 2006 7:13 pm, Simon Edwards wrote:
> > > > Anyway, I think I've come across a double free memory bug in PyQt
> > > > 3.15.1. Qt complains about a "Double QObject deletion detected.", and
> > > > valgrind points to a problem in sipKDialogBase::~sipKDialogBase().
> > > > (Reading memory which is already free'd, and invalid free(), delete
> > > > etc). This problem
> >
> > only
> >
> > > > appears when my app opens a dialog.
> >
> > OK, I've chopped my code right down See attachment. Running this on the
> > current Kubuntu Dapper shows this in the console:
> >
> > sbe@dapper3:~$ python ./qdialogdoublefree.py
> > kbuildsycoca running...
> > Double QObject deletion detected.
> > *** glibc detected *** double free or corruption (!prev): 0x082cfa40 ***
> > KCrash: Application 'qdialogdoublefree.py' crashing...
> > sbe@dapper3:~$
> >
> > Using show() instead of exec_loop() does in fact _not_ trigger the
> > problem.
>
> Attached is a PyQt only version which doesn't seem to have a problem (have
> I removed too much?). This is using latest snapshots.

On a 1/10 PyQt snapshot I get:

*** glibc detected *** double free or corruption (!prev): 0x081fc950 ***
Alarm clock

when I close the application, but only if the QDialog has been instantiated at 
least once (by pushing the button).  It works fine until I close the 
application. I don't know where the "Alarm clock" is coming from - a SIGALRM 
someplace? I don't get the Qt error or KCrash though.

I get the same thing if I create a main window and run KApplication's event 
loop and then instantiate the KDialogBase object with the main window as its 
parent. In that case,  the double free is happening before 
QApplication.quit() is called from "lastWindowClosed" (and KApplication uses 
QApplication's quit())

However, if I make UserEditDialog parentless (pass None instead of self - 
where "self" would be the KDialogBase obj), it works fine (as provided by 
Simon or with the KMainWindow).

Jim

_______________________________________________
PyKDE mailing list    PyKDE@mats.imk.fraunhofer.de
http://mats.imk.fraunhofer.de/mailman/listinfo/pykde
[prev in list] [next in list] [prev in thread] [next in thread] 

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