On Fri, Mar 13, 2009 at 09:25:43AM +0000, Alban Rochel wrote:
> Andrew Ross wrote:
> > On Thu, Mar 12, 2009 at 05:13:11PM -0700, Alan Irwin wrote:
> > My results were with 9730 so included Alban's fixes and I still see
> > the memory management issues with familying on my Kubuntu Intrepid
> > system (current stable release).
> > 
> > With the current svn revision (r9732) I am getting
> > *** glibc detected *** ./x02c: double free or corruption (!prev):
> > 0x08e3cb90 ***
> > with example 2. 
> > 
> > If it works for you I can see two possible causes
> > 
> > 1) Still issues with cmake 2.6.0. Things now compile and work after a
> > fashion, but I still get a warning message from moc
> > [ 72%] Generating moc_qt.cxx
> > /home/andrew/software/plplot/plplot/drivers/qt.h:0: Warning: No
> > relevant classes found. No output generated.
> > 
> > 2) It's a QT issue. (I've got version 4.4.3). 
> > 
> > I think it might be the latter.
> > 
> > The problem is that the first time through the code path qApp is
> > deleted, but is not set to NULL. You can't do this since qApp is not
> > actually a static function which returns the instance of QAppliction.
> > In my version of QT at least, deleting this does not result in a NULL
> > qApp pointer and so new QApplication is not called for the second
> > call to initQtApp. As a result qApp is still referring to the "old"
> > qApp pointer and so the second call to closeQtApp leads to a double
> > free when calling delete qApp. 
> > 
> > I don't understand how the current code works for you, and to me this
> > looks like a dodgy way of doing things. Perhaps it is "fixed" in a
> > later version of libqt4. 
> > 
> > Not being a QT expert I don't understand precisely how qApp is working. 
> > Is it really necessary to create a new QAppliction for every page? Seems 
> > unlikely.
> > 
> > Actually, it seems to be the delete qApp that is causing the problem.
> > There is something strange going on. If I delete qApp, then the next
> > call to new QApplication returns exactly the same pointer as the first
> > call, even though qApp is NULL just before the second call to new.
> > This would be very unlikely if it was genuinely returning a new
> > object. I think this may be a libqt4bug here. If I comment out the
> > call to delete qApp and remove the checks on qApp being NULL then
> > everything works correctly, but I wonder if there are then memory
> > leaks since I do get new instance of QApplication for each call to 
> > initQApp.
> > 
> > Alan, Alban, what versions of libq4t are you using?
> > 
> > Of course it could still be related to the cmake 2.6.0 issues. I will
> > get and build cmake 2.6.3 later to check. I'm surprised that it build
> > at all though if this is an issue.
> > 
> > Cheers
> > 
> > Andrew
> > 
> > ------------------------------------------------------------------------------
> > Apps built with the Adobe(R) Flex(R) framework and Flex Builder(TM) are
> > powering Web 2.0 with engaging, cross-platform capabilities. Quickly and
> > easily build your RIAs with Flex Builder, the Eclipse(TM)based development
> > software that enables intelligent coding and step-through debugging.
> > Download the free 60 day trial. http://p.sf.net/sfu/www-adobe-com
> > _______________________________________________
> > Plplot-devel mailing list
> > Plplot-devel@lists.sourceforge.net
> > https://lists.sourceforge.net/lists/listinfo/plplot-devel
> 
> Hi Andrew,
> 
> Actually, it was quite tricky to make the Qt drivers work in an 
> autonomous way, as Qt applications are not usually built like that.
> 
> What I've done is that calls to plD_init_whatever increments a counter 
> and, if this counter was 0 and no QApplication defined, a QApplication 
> is created. When calling plD_tidy, the counter is decremented, and the 
> last running device deletes the QApplication.
> 
> Thus there should be only one QApplication running at one point. I'm not 
> sure I was supposed to delete qApp, which is a special Qt variable. 
> Usually, one does not do that (qApp is created in main() and main 
> returns app.exec()), but I did it as I believe it was good practice for 
> memory management, and as it didn't raise any issue on my system 
> (kubuntu 64 8.10).
> 
> As for your moc not producing anything, actually since yesterday's 
> release it's normal. We could remove this call to moc, but it may prove 
> useful in the future.
> 
> I'll see what I can do.

This is interesting - we're running exactly the same system, but mine is 
on a 32-bit machine. Perhaps this is a 32-bit / 64-bit issue?

Andrew

------------------------------------------------------------------------------
Apps built with the Adobe(R) Flex(R) framework and Flex Builder(TM) are
powering Web 2.0 with engaging, cross-platform capabilities. Quickly and
easily build your RIAs with Flex Builder, the Eclipse(TM)based development
software that enables intelligent coding and step-through debugging.
Download the free 60 day trial. http://p.sf.net/sfu/www-adobe-com
_______________________________________________
Plplot-devel mailing list
Plplot-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/plplot-devel

Reply via email to