Am Wed, 7 Jan 2015 12:36:52 +0000
schrieb Nuno Santos <nunosan...@imaginando.pt>:

> Hi,
> 
> I’m not really sure. 
> 
> Question: 
> 
> - On program termination, isn’t all the memory allocated by it deleted?

when allocated on heap, no. the memory is just released, not delete()'ed, that 
is, no dtor is called at all.
the memory is returned to the system, available for other applications again, 
after your application has exited. so there is no memory "leak" here.

> 
> With this approach at least the QNetworkAccessManager which is being 
> allocated by the manager is supposedly being deleted:
> 
> Manager::~Manager()
> {
>     _networkAccessManager->deleteLater();
> }
> 
> Which is called if I set app as Manager parent.

which in turn won't get called, when your app on heap is not deleted anymore.

> 
> I’m not sure if this will result in a successful object deletion since the 
> event loop is now terminated at this point.
> 
> While without any crash, i’m always looking to improve my understanding of 
> this low level details. Any ideas, suggestions or explanations are welcome.

sometimes it's easier to use this kind of "hacks" (qapplication on heap, not 
deleted) instead of trying to fix too complex, threaded programs...

> 
> Thanks,
> 
> Regards,
> 
> Nuno
> 
> > On 07 Jan 2015, at 12:31, Michael Sué <s...@sf.mpg.de> wrote:
> > 
> > Hi,
> >  
> > With this approach, the object will no longer be deleted at program exit, 
> > right? So there can be no crash on deletion anymore.
> >  
> > - Michael.
> >  
> > From: interest-bounces+sue=sf.mpg...@qt-project.org 
> > [mailto:interest-bounces+sue=sf.mpg...@qt-project.org] On Behalf Of Nuno 
> > Santos
> > Sent: Wednesday, January 07, 2015 1:16 PM
> > To: Igor Mironchik
> > Cc: Interests Qt
> > Subject: Re: [Interest] Advice on random program finish crash
> >  
> > Hi,
> >  
> > I have made the following modification and it seems not crashing anymore:
> >  
> > static Manager* gManager = 0;
> >  
> > Manager* Manager::sharedManager()
> > {
> >           QMutexLocker lock(&managerMutex);
> >  
> >           if (!gManager)
> >           {
> >                       gManager = new Manager();
> >           }
> >  
> >           return gManager;
> > }
> >  
> > Does this seems a better approach?
> >  
> > Regards,
> >  
> > Nuno
> >  
> >> On 07 Jan 2015, at 10:30, Nuno Santos <nunosan...@imaginando.pt 
> >> <mailto:nunosan...@imaginando.pt>> wrote:
> >>  
> >> Hi Igor,
> >>  
> >> Ops… You are right, it is not static.
> >>  
> >> I have tried your suggestion but now it crashes everytime I close the app 
> >> and I can’t even get a stack trace like before. If I run it on debug, it 
> >> points me to assembler code. Not anything I can really point to.
> >>  
> >> Regards,
> >>  
> >> Nuno
> >>  
> >>> 
> >>> On 07 Jan 2015, at 10:19, Igor Mironchik <igor.mironc...@gmail.com 
> >>> <mailto:igor.mironc...@gmail.com>> wrote:
> >>>  
> >>> On Wed, 07 Jan 2015 13:01:32 +0300, Nuno Santos <nunosan...@imaginando.pt 
> >>> <mailto:nunosan...@imaginando.pt>> wrote:
> >>> 
> >>> 
> >>> Yes,
> >>> 
> >>> int main(int argc, char **argv)
> >>> {
> >>>    QGuiApplication app(argc, argv);
> >>> 
> >>>    ...
> >>> 
> >>>    return app.exec();
> >>> }
> >>> 
> >>> No. Here QGuiApplication is not static. Then in your app the situation is 
> >>> the next: QGuiApplication destroyes before your Manager. But any 
> >>> QObject-derived class must be created after QApplication and destroyed 
> >>> before QApplication. May be this is the reason of your crash.
> >>> 
> >>> Make QGuiApplication static. For example:
> >>> 
> >>> static QSharedPointer< QApplication > application( int argc = 0, char ** 
> >>> argv = 0 )
> >>> {
> >>>              static QSharedPointer< QApplication > app(
> >>>                              new QApplication( argc, argv ) );
> >>> 
> >>>              return app;
> >>> }
> >>> 
> >>> and in main()
> >>> 
> >>> QSharedPointer< QApplication > app = application( argc, argv );
> >>> 
> >>> before any QObject...
> >>> 
> >>> 
> >>> 
> >>> 
> >>> 
> >>> On 07 Jan 2015, at 09:54, Igor Mironchik <igor.mironc...@gmail.com 
> >>> <mailto:igor.mironc...@gmail.com>> wrote:
> >>> 
> >>> Hi, I have one question: is QApplication static too?
> >>> 
> >>> On Wed, 07 Jan 2015 12:32:21 +0300, Nuno Santos <nunosan...@imaginando.pt 
> >>> <mailto:nunosan...@imaginando.pt>>
> >>> wrote:
> >>> 
> >>> 
> >>> Hi,
> >>> 
> >>> I’m having a problem with a random crash that not always happens. I
> >>> would like to have your advice on how to find the origin of it.
> >>> 
> >>> This crash always happens on program exit and the stack trace is the
> >>> following:
> >>> 
> >>> Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
> >>> 0   org.qt-project.QtCore                0x0000000109a03549
> >>> QMutexPrivate::allocate() + 105
> >>> 1   org.qt-project.QtCore                0x0000000109a02d1c
> >>> QBasicMutex::lockInternal(int) + 92
> >>> 2   org.qt-project.QtCore                0x0000000109a02c64 
> >>> QMutex::lock() + 52
> >>> 3   org.qt-project.QtCore                0x0000000109a0b6fd
> >>> QWaitCondition::wait(QMutex*, unsigned long) + 173
> >>> 4   org.qt-project.QtCore                0x0000000109a0aeae
> >>> QThread::wait(unsigned long) + 110
> >>> 5   org.qt-project.QtNetwork          0x000000010a4870da
> >>> QNetworkAccessManagerPrivate::~QNetworkAccessManagerPrivate() + 58
> >>> 6   org.qt-project.QtNetwork          0x000000010a48722e
> >>> QNetworkAccessManagerPrivate::~QNetworkAccessManagerPrivate() + 14
> >>> 7   org.qt-project.QtCore                0x0000000109c3e7c7
> >>> QObject::~QObject() + 1879
> >>> 8   org.qt-project.QtNetwork          0x000000010a483c16
> >>> QNetworkAccessManager::~QNetworkAccessManager() + 262
> >>> 
> >>> The only particularity of this QNetworkAccessManager is the fact that it
> >>> is instantiated on a class that is a singleton:
> >>> 
> >>> class Manager : public QObject
> >>> {
> >>> public:
> >>> 
> >>>              static Manager* sharedManager();
> >>> 
> >>>              ...
> >>> 
> >>>              QNetworkAccessManager* networkAccessManager();
> >>> 
> >>>              ...
> >>> 
> >>> protected:
> >>> 
> >>>              Manager();
> >>>              ~Manager();
> >>> 
> >>>              ...
> >>>              
> >>>              QNetworkAccessManager _networkAccessManager;
> >>> };
> >>> 
> >>> 
> >>> Manager* Manager::sharedManager()
> >>> {
> >>>              QMutexLocker lock(&managerMutex);
> >>>              static Manager manager;
> >>>              return &manager;
> >>> }
> >>> 
> >>> Manager::Manager() :
> >>>              _networkAccessManager()
> >>> {
> >>>              ...             
> >>> }
> >>> 
> >>> Manager::~Manager()
> >>> {
> >>>              
> >>> }
> >>> 
> >>> Is there any obvious reason for this crash to happen randomly at program
> >>> termination?
> >>> 
> >>> Thanks,
> >>> 
> >>> Regards,
> >>> 
> >>> Nuno Santos
> >>> _______________________________________________
> >>> Interest mailing list
> >>> Interest@qt-project.org <mailto:Interest@qt-project.org>
> >>> http://lists.qt-project.org/mailman/listinfo/interest 
> >>> <http://lists.qt-project.org/mailman/listinfo/interest>
> >>> 
> >>> 
> >>> --
> >>> Best Regards,
> >>> Igor Mironchik.
> >>> _______________________________________________
> >>> Interest mailing list
> >>> Interest@qt-project.org <mailto:Interest@qt-project.org>
> >>> http://lists.qt-project.org/mailman/listinfo/interest 
> >>> <http://lists.qt-project.org/mailman/listinfo/interest>
> >>>  
> >>> 
> >>> 
> >>> -- 
> >>> Best Regards,
> >>> Igor Mironchik.
> >> 
> >>  
> >> _______________________________________________
> >> Interest mailing list
> >> Interest@qt-project.org <mailto:Interest@qt-project.org>
> >> http://lists.qt-project.org/mailman/listinfo/interest 
> >> <http://lists.qt-project.org/mailman/listinfo/interest>


-- 
/*
 *printk(KERN_ERR "happy meal: Eieee, rx config register gets greasy fries.\n");
 *  linux-2.6.19/drivers/net/sunhme.c
 */

Attachment: signature.asc
Description: PGP signature

_______________________________________________
Interest mailing list
Interest@qt-project.org
http://lists.qt-project.org/mailman/listinfo/interest

Reply via email to