From d55db285fc4ae0a978591213c294f53ab879cd40 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Thu, 11 Dec 2014 17:50:01 -0800 Subject: Autotest: Fix a race condition in launching the QtDBus sub-processes Wait for the subprocess to print "ready" before assuming that it is ready to receive calls. waitForStarted() will return as soon as the child is running, but it may not have registered on D-Bus yet. This also solves the synchronization problem more elegantly than how tst_qdbusmarshall.cpp was trying to do it. Change-Id: I548dfba2677cc5a34ba50f4310c4d5baa98093b2 Reviewed-by: Simon Hausmann --- tests/auto/dbus/qdbusmarshall/tst_qdbusmarshall.cpp | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) (limited to 'tests/auto/dbus/qdbusmarshall/tst_qdbusmarshall.cpp') diff --git a/tests/auto/dbus/qdbusmarshall/tst_qdbusmarshall.cpp b/tests/auto/dbus/qdbusmarshall/tst_qdbusmarshall.cpp index 0d9fba3e1f..4d12522a68 100644 --- a/tests/auto/dbus/qdbusmarshall/tst_qdbusmarshall.cpp +++ b/tests/auto/dbus/qdbusmarshall/tst_qdbusmarshall.cpp @@ -137,20 +137,8 @@ void tst_QDBusMarshall::initTestCase() # define EXE "" #endif proc.start(QFINDTESTDATA("qpong/qpong" EXE)); - if (!QDBusConnection::sessionBus().interface()->isServiceRegistered(serviceName)) { - QVERIFY2(proc.waitForStarted(), qPrintable(proc.errorString())); - - QVERIFY(con.isConnected()); - con.connect("org.freedesktop.DBus", QString(), "org.freedesktop.DBus", "NameOwnerChanged", - QStringList() << serviceName << QString(""), QString(), - &QTestEventLoop::instance(), SLOT(exitLoop())); - QTestEventLoop::instance().enterLoop(2); - QVERIFY(!QTestEventLoop::instance().timeout()); - QVERIFY(QDBusConnection::sessionBus().interface()->isServiceRegistered(serviceName)); - con.disconnect("org.freedesktop.DBus", QString(), "org.freedesktop.DBus", "NameOwnerChanged", - QStringList() << serviceName << QString(""), QString(), - &QTestEventLoop::instance(), SLOT(exitLoop())); - } + QVERIFY2(proc.waitForStarted(), qPrintable(proc.errorString())); + QVERIFY(proc.waitForReadyRead()); } void tst_QDBusMarshall::cleanupTestCase() -- cgit v1.2.3