Merge pull request #40 from sletta/mer-stable

[packaging] qmljs is not built in release builds, so don't bundle it
Make sure texture factories are delete before libraries are unloaded.

Because scene graph adaptations and custom implementations can
instantiate QQuickTextureFactories, we need to make sure that
their destructors are called before their libraries are unloaded
to avoid crashes on shutdown.

Change-Id: I17d38e2909aabcb4ea7bf4eecc29df86c8479fdb
Reviewed-by: Robin Burchell <robin+qt@viroteck.net>
Do not emit Timer.onTriggered while executing arbitrary JS code

Task-number: QTBUG-39371
Change-Id: Ibf232560918d30961bd979e14aac3ae7d2f264eb
Reviewed-by: Robin Burchell <robin+qt@viroteck.net>
Reviewed-by: Martin Jones <martin.jones@jollamobile.com>
Fix crash when animators are deleted just after being started.

Change-Id: I35850e279dae596edb9a1b93143d6aa195221b41
Reviewed-by: Robin Burchell <robin+qt@viroteck.net>
Fix interaction of garbage collector with JS objects during QML type instantiation

It may happen that during the lengthy process of instantiating a tree of
objects for QML, the garbage collector runs.

For objects created by QML we support different ownership models, for example
in QtQuick visual parents keep their visual children alive, despite perhaps a
lack of QObject parentship. That ownership becomes active once the QML
autoparent function has assigned the correct visual parent, which happens after
object instantiation (after QQmlObjectCreator).

Similarly when a composite type is created, its QObject parent is only set
after all properties have been set. The root QObject is kept alive through a
special boolean, but if the sub-objects aren't children yet, their JS wrapper
might get deleted. For composite types with var properties, that also means
their var properties get deleted, such as the model property of TableView.qml
in the bug report.

In the future we want to support creating QWidget hierarchies with QML, which
also for layouts may rely on a delayed parent assignment for layouts.

To accommodate all this, this patch introduces an array on the JS stack that
keeps track of all JS wrappers for all QObjects created. This array is alive
during object tree creation. Afterwards, the different ownership models take
over, for example the auto parent function assigning a visual parent.

This patch also fixes an off-by-one in the total object count calculation
for composite types, where when instantiating a composite type as a sub-object
we counted the sub composite's object count but forgot the object itself.

Task-number: QTBUG-38835
Task-number: QTBUG-39966
Change-Id: I6104b2434510642081e0c54793ed296adeca7481
Reviewed-by: Lars Knoll <lars.knoll@digia.com>

Conflicts:
	tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp
V4: work around a bug in libc++'s std::vector<bool>

The ++operator of std::vector<bool>::iterator in libc++ has a bug when
using it on an iterator pointing to the last element. It will not be set
to ::end(), but beyond that. (It will be set to the first multiple of
the native word size that is bigger than size().)

See http://llvm.org/bugs/show_bug.cgi?id=19663

Task-number: QTBUG-39911
Change-Id: Ic244d9c90ee6b596261a6e322301c411a14820a8
Reviewed-by: Fawzi Mohamed <fawzi.mohamed@digia.com>
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Fix QQmlDelegateModel getting out of sync

Fixes a regression introduced by a0aefe1, which caused that the
source data model and adaptorModel could sometimes get out of
sync.

Change-Id: Ia6b5fc380cc6cf6549ae857e6da54e088a5dadb5
Reviewed-by: Alan Alpert (Personal) <416365416c@gmail.com>
Don't dereference null pointer.

Task-number: QTBUG-40448
Change-Id: I75eb886ae765191101d6b01ebd038211e5fe8fba
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Do not use mark() when marking ExecutionContexts

Some execution contexts in the parent chain can be allocated
on the C stack instead of the GC heap. Calling mark() on those would
push them onto the GC stack (which is identical to the JS stack).
In rare cases the reference can survive to live into the next call to
gc(), causing invalid accesses to already deleted contexts.

Change-Id: I709f58de27be9386cf70707c84e4c86c7c303fa7
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Fix crash when deleting component in Component.onComplete through loader

This is a regression introduced with Qt 5.3.0. The recursion watcher code that
is supposed to handle the test case of QTBUG-39775 can detect the recursion
into the object creator. However the boolean that indicates the recursion is a
member of a structure that's deleted afterwards. To avoid access to deleted
memory, this patch simply reference counts data structure shared between the
creators and also wraps the recursion watcher into a convenience class that
also increases/decreases the reference count accordingly.

Change-Id: I8d2e3e200ab1295e89d951e09f187d382a056d5a
Task-number: QTBUG-39775
Reviewed-by: Lars Knoll <lars.knoll@digia.com>

Conflicts:
	src/qml/qml/qqmlobjectcreator.cpp
Fix memory leak in QQmlComponent::createObject

Regression introduced with 5.3.0. Prevent the leak of the object creator
on repeated createObject calls by using a scoped pointer.

Change-Id: Ib4fe7c9c6926c2390f7ae78f3287bb7da5f60527
Task-number: QTBUG-39742
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Fix QQmlComponent detailed description.

setParent() => setParentItem()

Task-number: QTBUG-39687
Change-Id: I67dc871a6d3b10af321d1f7b08921dcad0a6f19d
Reviewed-by: J-P Nurmi <jpnurmi@digia.com>
Fix crash in QObjectWrapper

This can happen during QObject destruction, when
QObjectPrivate::deleteChildren() itself sets entries
in the children list to zero when deleting. These
zeros cause crash in markChildQObjectsRecursively().

Task-number: QTBUG-38635
Change-Id: I29ad9e793b78ca4e8d73fbb125f46db1b8292f20
Reviewed-by: Alan Alpert <aalpert@blackberry.com>
Merge pull request #41 from sletta/selected-fixes

A number of bug and regression fixes from 5.3.2 and 5.4
Clear the chain of incubated objects in QQmlIncubatorPrivate::clear

Change-Id: I432310c0e6006d567fd59b4b1021a9e1538ef78f
Reviewed-by: Alan Alpert <aalpert@blackberry.com>
Avoid double deletion when deleting an incubating component.

The guard in QQmlIncubatorPrivate::clear() was invalidated by clearing
the guards in QQmlIncubatorPrivate::incubate() when a deletion was
detected.

If we detect a deletion, leave the guards in place, to be handled in
QQmlIncubatorPrivate::clear().

Task-number: QTBUG-40685
Change-Id: I1bf7422fda97745f1f7a3b42285a399244c09a1f
Reviewed-by: Alan Alpert <aalpert@blackberry.com>
Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Fix potential deadlook in threaded renderloop.

Change-Id: I415e632aa4e584c8fca745581f25a676db0eae42
Reviewed-by: Giulio Camuffo <giulio.camuffo@jollamobile.com>
Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
The cached objects can be deleted, so keep them in a QPointer.

Change-Id: Ieaebd2e7b9823cbe22efc331e42ceab8fbbda0e8
Task-number: QTBUG-40201
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Merge pull request #42 from sletta/selected-changes

[qtdeclarative] Fix potential renderloop lockup and a crash with repeaters.
Do not add Images with invalid geometry to the scene graph.

Task-number: QTBUG-35656
Task-number: QTBUG-36050

Change-Id: Iea2d5303bdeb9c523e59ebcdc9f97288060be022
Reviewed-by: Shawn Rutledge <shawn.rutledge@digia.com>
Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>