diff options
author | Jørgen Lind <jorgen.lind@theqtcompany.com> | 2015-09-04 12:25:56 +0200 |
---|---|---|
committer | Jørgen Lind <jorgen.lind@theqtcompany.com> | 2015-09-04 16:12:47 +0200 |
commit | b666aa58d7a168fe4ddb694caba099343421aa65 (patch) | |
tree | 694f23b3a7198f5f97287584c3eb39a0ffce6227 | |
parent | c5d77c7f720b826cd52f1f6f598ea16e662933cc (diff) |
Add an assert in QtWaylandScanner for duplicate binds
Since Q_SIGNALS are a one -> many distribution we can end up signalling
creation requests to many slots. Its then important that we verify that
only one of these actually binds an object for the object id. Its a
programming error to have this situation, hence its an assert, and not a
runtime check that gives a warning. The bind will overwrite the object
and the last bind will continue to work as normal in release mode.
Change-Id: I1f469066cf5287789249763843e6cbaa545ee619
-rw-r--r-- | src/qtwaylandscanner/qtwaylandscanner.cpp | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/src/qtwaylandscanner/qtwaylandscanner.cpp b/src/qtwaylandscanner/qtwaylandscanner.cpp index 78873c714..6d602ad08 100644 --- a/src/qtwaylandscanner/qtwaylandscanner.cpp +++ b/src/qtwaylandscanner/qtwaylandscanner.cpp @@ -666,6 +666,7 @@ void process(QXmlStreamReader &xml, const QByteArray &headerPath, const QByteArr //and use function overloading instead. Jan do you have a lot of code dependent on this behavior? printf(" %s::Resource *%s::bind(struct ::wl_client *client, uint32_t id, int version)\n", interfaceName, interfaceName); printf(" {\n"); + printf(" Q_ASSERT_X(!wl_client_get_object(client, id), \"QWaylandObject bind\", QStringLiteral(\"binding to object %1 more than once\").arg(id).toLocal8Bit().constData());\n"); printf(" Resource *resource = %s_allocate();\n", interfaceNameStripped); printf(" resource->%s_object = this;\n", interfaceNameStripped); printf("\n"); |