lp:~aacid/gsettings-qt/disconnect_signal_handler

Created by Albert Astals Cid and last modified
Get this branch:
bzr branch lp:~aacid/gsettings-qt/disconnect_signal_handler
Only Albert Astals Cid can upload to this branch. If you are Albert Astals Cid please log in for upload directions.

Branch merges

Related bugs

Related blueprints

Branch information

Owner:
Albert Astals Cid
Project:
gsettings-qt
Status:
Merged

Recent revisions

76. By Albert Astals Cid on 2015-11-30

Disconnect signal handler on destruction

When running unity8 under valgrind sometimes I get

==31122== Invalid read of size 8
==31122== at 0x620DB42: QMetaObject::invokeMethod(QObject*, char const*, Qt::ConnectionType, QGenericReturnArgument, QGenericArgument, QGenericArgument, QGenericArgument, QGenericArgument, QGenericArgument, QGenericArgument, QGenericArgument, QGenericArgument, QGenericArgument, QGenericArgument) (in /usr/lib/x86_64-linux-gnu/libQt5Core.so.5.4.2)
==31122== by 0x1C7C63EE: invokeMethod (qobjectdefs.h:391)
==31122== by 0x1C7C63EE: QGSettingsPrivate::settingChanged(_GSettings*, char const*, void*) (qgsettings.cpp:40)
==31122== by 0x129DAA59: g_cclosure_marshal_VOID__STRINGv (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.4700.1)
==31122== by 0x129D81D3: _g_closure_invoke_va (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.4700.1)
==31122== by 0x129F29D5: g_signal_emit_valist (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.4700.1)
==31122== by 0x129F30BE: g_signal_emit (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.4700.1)
==31122== by 0x138478EB: g_settings_real_change_event (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.4700.1)
==31122== by 0x14540D8F: ffi_call_unix64 (in /usr/lib/x86_64-linux-gnu/libffi.so.6.0.4)
==31122== by 0x145407F7: ffi_call (in /usr/lib/x86_64-linux-gnu/libffi.so.6.0.4)
==31122== by 0x129D8CF4: g_cclosure_marshal_generic_va (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.4700.1)
==31122== by 0x129D81D3: _g_closure_invoke_va (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.4700.1)
==31122== by 0x129F24E7: g_signal_emit_valist (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.4700.1)
==31122== Address 0x1dbaa450 is 0 bytes inside a block of size 24 free'd
==31122== at 0x4C2D28B: operator delete(void*) (vg_replace_malloc.c:575)
==31122== by 0x622CD2A: QObjectPrivate::deleteChildren() (in /usr/lib/x86_64-linux-gnu/libQt5Core.so.5.4.2)
==31122== by 0x623661F: QObject::~QObject() (in /usr/lib/x86_64-linux-gnu/libQt5Core.so.5.4.2)
==31122== by 0x1C5BB7AD: ~QQmlElement (qqmlprivate.h:98)
==31122== by 0x1C5BB7AD: QQmlPrivate::QQmlElement<GSettingsQml>::~QQmlElement() (qqmlprivate.h:98)
==31122== by 0x622CD2A: QObjectPrivate::deleteChildren() (in /usr/lib/x86_64-linux-gnu/libQt5Core.so.5.4.2)
==31122== by 0x623661F: QObject::~QObject() (in /usr/lib/x86_64-linux-gnu/libQt5Core.so.5.4.2)
==31122== by 0x53E886C: QQuickItem::~QQuickItem() (qquickitem.cpp:2223)
==31122== by 0x5402DED: ~QQuickRectangle (qquickrectangle_p.h:128)
==31122== by 0x5402DED: ~QQmlElement (qqmlprivate.h:98)
==31122== by 0x5402DED: QQmlPrivate::QQmlElement<QQuickRectangle>::~QQmlElement() (qqmlprivate.h:98)
==31122== by 0x622F66F: QObject::event(QEvent*) (in /usr/lib/x86_64-linux-gnu/libQt5Core.so.5.4.2)
==31122== by 0x53E66BA: QQuickItem::event(QEvent*) (qquickitem.cpp:7302)
==31122== by 0x61FDDE8: QCoreApplication::notify(QObject*, QEvent*) (in /usr/lib/x86_64-linux-gnu/libQt5Core.so.5.4.2)
==31122== by 0x61FDF1A: QCoreApplication::notifyInternal(QObject*, QEvent*) (in /usr/lib/x86_64-linux-gnu/libQt5Core.so.5.4.2)
==31122== Block was alloc'd at
==31122== at 0x4C2C12F: operator new(unsigned long) (vg_replace_malloc.c:333)
==31122== by 0x1C5BD113: GSettingsQml::componentComplete() (gsettings-qml.cpp:141)
==31122== by 0x5E25421: ??? (in /usr/lib/x86_64-linux-gnu/libQt5Qml.so.5.4.2)
==31122== by 0x5DB22E9: ??? (in /usr/lib/x86_64-linux-gnu/libQt5Qml.so.5.4.2)
==31122== by 0x5DB2B9E: QQmlEnginePrivate::incubate(QQmlIncubator&, QQmlContextData*) (in /usr/lib/x86_64-linux-gnu/libQt5Qml.so.5.4.2)
==31122== by 0x5DAE4EB: QQmlComponent::create(QQmlIncubator&, QQmlContext*, QQmlContext*) (in /usr/lib/x86_64-linux-gnu/libQt5Qml.so.5.4.2)
==31122== by 0x5498859: QQuickLoaderPrivate::_q_sourceLoaded() (qquickloader.cpp:713)
==31122== by 0x54989F7: QQuickLoaderPrivate::load() (qquickloader.cpp:596)
==31122== by 0x5E25421: ??? (in /usr/lib/x86_64-linux-gnu/libQt5Qml.so.5.4.2)
==31122== by 0x5DADEAD: QQmlComponentPrivate::complete(QQmlEnginePrivate*, QQmlComponentPrivate::ConstructionState*) (in /usr/lib/x86_64-linux-gnu/libQt5Qml.so.5.4.2)
==31122== by 0x5DADF76: QQmlComponentPrivate::completeCreate() (in /usr/lib/x86_64-linux-gnu/libQt5Qml.so.5.4.2)
==31122== by 0x5DADDDF: QQmlComponent::create(QQmlContext*) (in /usr/lib/x86_64-linux-gnu/libQt5Qml.so.5.4.2)

Which as far as i understand means that the QGSettingsPrivate::settingChanged is being called even if GSettingsQml has already been destroyed.

By disconnecting the signal handler I have not been able to reproduce the valgrind warning anymore

75. By CI Train Bot Account on 2015-11-04

Releasing 0.1+16.04.20151104-0ubuntu1

74. By Lars Karlitski on 2015-11-04

qgsettings-qml: explicitly emit changed events

We're working around QTBUG-32859 by not dispatching changed signals
directly. This leads to two issues:

1. Changed signals are not emitted by GSettingsQml, because it only
emits those when the value is different from its cached one, which is
already updated by the time the queued signal arrives.

2. Calling schema.reset() from qml and immediately fetching the value
after returns the old value, because the value was only updated when the
signal arrives.

Fix these by explicitly emitting the changed signal when setting the
value from qml (the later one is then ignored) and setting the cached
value when calling reset().

Also, remove changesSpy from test_reset(), because that now counts
changes correctly and includes the ones from previous tests.

This patch can be reverted once the Qt bug is fixed. Fixes: #1503693
Approved by: Albert Astals Cid

73. By CI Train Bot Account on 2015-08-10

Releasing 0.1+15.04.20150810-0ubuntu1

72. By Lukáš Tinkl on 2015-08-10

Force handling deferred delete events to avoid memory leaks Fixes: #1460970
Approved by: Nick Dedekind, Lars Uebernickel

71. By Gerry Boland on 2015-08-10

Add changelog entry inserted into release branch

70. By Timo Jyrinki on 2015-06-15

No-change rebuild against Qt 5.4.2.

69. By Timo Jyrinki on 2015-03-18

No-change rebuild against Qt 5.4.1.

68. By Timo Jyrinki on 2015-02-16

No-change rebuild against Qt 5.4.0.

67. By Timo Jyrinki on 2014-11-12

No-change rebuild against Qt 5.3.2.

Branch metadata

Branch format:
Branch format 7
Repository format:
Bazaar repository format 2a (needs bzr 1.16 or later)
Stacked on:
lp:gsettings-qt
This branch contains Public information 
Everyone can see this information.