Hi Simon,

I took a look and I'm pretty sure I'm right ;-). BTW I'm using 5.4 
branch (sha1 f9ee33f96), is a little  bit old, but I bet nobody
fixed it. The same problem is in previous releases.

So, the singletons are deleted in QQmlEngine::~QQmlEngine():910
The other active objects are deleted in  MemoryManager::sweep(*true*) 
which is called by MemoryManager::~MemoryManager() 
which is called by ExecutionEngine::~ExecutionEngine()
which is called by QV8Engine::~QV8Engine()
which is called by QJSEngine::~QJSEngine() 
which is called *after* QQmlEngine::~QQmlEngine()

Check the call-stack:
0   MyObject::~MyObject myobject.cpp    44  0x7fffd141eb4b  
1   MyObject::~MyObject myobject.cpp    46  0x7fffd141ec8a  
2   (anonymous namespace)::QObjectDeleter::~QObjectDeleter  
qv4qobjectwrapper.cpp   1018    0x7ffff5f79ee1  f9ee33f96f9ee33f96
3   (anonymous namespace)::QObjectDeleter::~QObjectDeleter  
qv4qobjectwrapper.cpp   1021    0x7ffff5f79f2e  
4   QV4::MemoryManager::sweep   qv4mm.cpp   377 0x7ffff5efd080  
5   QV4::MemoryManager::~MemoryManager  qv4mm.cpp   515 0x7ffff5efda18  
6   QV4::ExecutionEngine::~ExecutionEngine  qv4engine.cpp   421 0x7ffff5ee4f54  
7   QV8Engine::~QV8Engine   qv8engine.cpp   116 0x7ffff606b7f2  
8   QV8Engine::~QV8Engine   qv8engine.cpp   117 0x7ffff606b87e  
9   QJSEngine::~QJSEngine   qjsengine.cpp   203 0x7ffff5e64b1e  
10  QQmlEngine::~QQmlEngine qqmlengine.cpp  893 0x7ffff5fb0b5d  
11  QQmlEngine::~QQmlEngine qqmlengine.cpp  916 0x7ffff5fb0b8c  
12  QObjectPrivate::deleteChildren  qobject.cpp 1943    0x7ffff599efd0  
13  QObject::~QObject   qobject.cpp 1034    0x7ffff599d760  
14  QWindow::~QWindow   qwindow.cpp 210 0x7ffff63f5bdc  
15  QQuickWindow::~QQuickWindow qquickwindow.cpp    1099    0x7ffff6bc0353  
16  QQuickView::~QQuickView qquickview.cpp  220 0x7ffff6c9fe35  
17  main    main.cpp    12  0x4021fb    

IMHO the sequence from QQmlEngine::~QQmlEngine():910 should be moved
after/in MemoryManager::~MemoryManager ...

Cheers,
BogDan.




________________________________
From: Hausmann Simon <simon.hausm...@digia.com>
To: Chris Adams <chris.ad...@qinetic.com.au>; BogDan <bog_dan...@yahoo.com> 
Cc: Qt Development Group <development@qt-project.org> 
Sent: Monday, September 22, 2014 9:33 AM
Subject: SV: [Development] [QML] Singletons are deleted before the other    
objects



Hi,

In gener‎al I agree with Chris. However I'm a little puzzled that this is 
happening. If you take a look at the QQmlEngine destructor you can see that 
singletons are deleted last. So I'm wondering what is happening in your app 
Bogdan. Can you create a minimal test case? 

Thanks,
Simon

Fra: Chris Adams
Sendt: 05:45 mandag 22. september 2014
Til: BogDan
Kopi: Qt Development Group
Emne: Re: [Development] [QML] Singletons are deleted before the other objects 

Hi,



On Fri, Sep 19, 2014 at 10:37 PM, BogDan <bog_dan...@yahoo.com> wrote:

Hello folks,
>
>  Singletons registered using qmlRegisterSingletonType, are deleted *before*
>the other active objects. I consider it to be wrong because some of the active
>objects may still need to access the singletons in their destructor ...
>
>IMHO singletons should be the very last objects deleted (also in the reverse
>order).
>

I tend to agree that they should be deleted last.  Enforcing deletion in the 
reverse
order to how they were registered might impose some slight performance penalty
at instantiation time, however, depending on how the deletion order is 
determined
at cleanup time, since they are instantiated on demand (and hence possibly
out-of-order).


>Is there any reason why they are deleted before the other active objects?
>Or this is just a bug?
>

I don't believe that there is any particular reason for deleting them prior to 
other
active objects, but perhaps Simon or Lars can correct me on this point.
Nonetheless, I don't think that the current behaviour is a bug, per-se, as the
destruction order was never documented or guaranteed, as far as I know.

Cheers,
Chris.


>Cheers,
>BogDan.
>
>_______________________________________________
>Development mailing list
>Development@qt-project.org
>http://lists.qt-project.org/mailman/listinfo/development
>
_______________________________________________
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development

Reply via email to