aboutsummaryrefslogtreecommitdiffstats
path: root/src/declarative/debugger/qdeclarativedebugservice.cpp
diff options
context:
space:
mode:
authorKai Koehne <kai.koehne@nokia.com>2011-11-21 16:03:53 +0100
committerQt by Nokia <qt-info@nokia.com>2011-11-23 13:21:59 +0100
commit92b4c1abcfc64855cd73733f136a86435e562beb (patch)
tree279eaa8e12dc4ea58b4c375de944f4b316af4288 /src/declarative/debugger/qdeclarativedebugservice.cpp
parent4e9301e3d53febcf6b0dfe108c4189c2982952ff (diff)
Debugger: Make registration of services explicit
Services now have to call registerService() themselves in the constructor. This fixes a race condition where the empty implementation of messageReceived() was called instead of the one in the subclass because the object wasn't fully constructed yet. Change-Id: I590ec8b76e906bdb6b5cdcb18680938edde283ee Reviewed-by: Aurindam Jana <aurindam.jana@nokia.com>
Diffstat (limited to 'src/declarative/debugger/qdeclarativedebugservice.cpp')
-rw-r--r--src/declarative/debugger/qdeclarativedebugservice.cpp27
1 files changed, 13 insertions, 14 deletions
diff --git a/src/declarative/debugger/qdeclarativedebugservice.cpp b/src/declarative/debugger/qdeclarativedebugservice.cpp
index be60ea4609..0a997aa2fe 100644
--- a/src/declarative/debugger/qdeclarativedebugservice.cpp
+++ b/src/declarative/debugger/qdeclarativedebugservice.cpp
@@ -61,14 +61,9 @@ QDeclarativeDebugService::QDeclarativeDebugService(const QString &name, QObject
d->server = QDeclarativeDebugServer::instance();
d->status = QDeclarativeDebugService::NotConnected;
- if (!d->server)
- return;
-
- if (d->server->serviceNames().contains(name)) {
- qWarning() << "QDeclarativeDebugService: Conflicting plugin name" << name;
+ if (d->server->serviceNames().contains(d->name)) {
+ qWarning() << "QDeclarativeDebugService: Conflicting plugin name" << d->name;
d->server = 0;
- } else {
- d->server->addService(this);
}
}
@@ -80,16 +75,20 @@ QDeclarativeDebugService::QDeclarativeDebugService(QDeclarativeDebugServicePriva
d->name = name;
d->server = QDeclarativeDebugServer::instance();
d->status = QDeclarativeDebugService::NotConnected;
+}
+/**
+ Registers the service. This should be called in the constructor of the inherited class. From
+ then on the service might get asynchronous calls to messageReceived().
+ */
+QDeclarativeDebugService::Status QDeclarativeDebugService::registerService()
+{
+ Q_D(QDeclarativeDebugService);
if (!d->server)
- return;
+ return NotConnected;
- if (d->server->serviceNames().contains(name)) {
- qWarning() << "QDeclarativeDebugService: Conflicting plugin name" << name;
- d->server = 0;
- } else {
- d->server->addService(this);
- }
+ d->server->addService(this);
+ return status();
}
QDeclarativeDebugService::~QDeclarativeDebugService()