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: > > > > [EMAIL PROTECTED]:~$ python ./qdialogdoublefree.py > > kbuildsycoca running... > > Double QObject deletion detected. > > *** glibc detected *** double free or corruption (!prev): 0x082cfa40 *** > > KCrash: Application 'qdialogdoublefree.py' crashing... > > [EMAIL PROTECTED]:~$ > > > > 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 [email protected] http://mats.imk.fraunhofer.de/mailman/listinfo/pykde
