summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/corelib/kernel/qsharedmemory/sharedmemoryhelper/main.cpp9
-rw-r--r--tests/auto/corelib/kernel/qsharedmemory/test/tst_qsharedmemory.cpp25
2 files changed, 24 insertions, 10 deletions
diff --git a/tests/auto/corelib/kernel/qsharedmemory/sharedmemoryhelper/main.cpp b/tests/auto/corelib/kernel/qsharedmemory/sharedmemoryhelper/main.cpp
index 63f38f43f3..30c9d01e98 100644
--- a/tests/auto/corelib/kernel/qsharedmemory/sharedmemoryhelper/main.cpp
+++ b/tests/auto/corelib/kernel/qsharedmemory/sharedmemoryhelper/main.cpp
@@ -43,6 +43,7 @@
#include <QStringList>
#include <QDebug>
#include <QTest>
+#include <stdio.h>
void set(QSharedMemory &sm, int pos, QChar value)
{
@@ -82,7 +83,10 @@ int producer()
return EXIT_FAILURE;
}
}
+ // tell parent we're ready
//qDebug("producer created and attached");
+ puts("");
+ fflush(stdout);
if (!producer.lock()) {
qWarning() << "Could not lock" << producer.key();
@@ -129,9 +133,8 @@ int producer()
//qDebug("producer done");
- // Sleep for a bit to let all consumers start, otherwise they will get stuck in the attach loop,
- // because at least in Symbian the shared memory will be destroyed if there are no active handles to it.
- QTest::qSleep(3000);
+ // Sleep for a bit to let all consumers exit
+ getchar();
return EXIT_SUCCESS;
}
diff --git a/tests/auto/corelib/kernel/qsharedmemory/test/tst_qsharedmemory.cpp b/tests/auto/corelib/kernel/qsharedmemory/test/tst_qsharedmemory.cpp
index 5d9b470494..c7c75947ad 100644
--- a/tests/auto/corelib/kernel/qsharedmemory/test/tst_qsharedmemory.cpp
+++ b/tests/auto/corelib/kernel/qsharedmemory/test/tst_qsharedmemory.cpp
@@ -177,6 +177,7 @@ void tst_QSharedMemory::cleanup()
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
+#include <errno.h>
#endif
QString tst_QSharedMemory::helperBinary()
@@ -211,7 +212,7 @@ int tst_QSharedMemory::remove(const QString &key)
int id = shmget(unix_key, 0, 0660);
if (-1 == id) {
- qDebug() << "shmget failed";
+ qDebug() << "shmget failed" << strerror(errno);
return -4;
}
@@ -634,9 +635,8 @@ class Producer : public QThread
{
public:
- void run()
+ Producer() : producer(QLatin1String("market"))
{
- QSharedMemory producer(QLatin1String("market"));
int size = 1024;
if (!producer.create(size)) {
// left over from a crash...
@@ -646,7 +646,11 @@ public:
QVERIFY(producer.create(size));
}
}
- QVERIFY(producer.isAttached());
+ }
+
+ void run()
+ {
+
char *memory = (char*)producer.data();
memory[1] = '0';
QTime timer;
@@ -671,6 +675,8 @@ public:
QVERIFY(producer.unlock());
}
+
+ QSharedMemory producer;
private:
};
@@ -701,6 +707,7 @@ void tst_QSharedMemory::simpleThreadedProducerConsumer()
#endif
Producer p;
+ QVERIFY(p.producer.isAttached());
if (producerIsThread)
p.start();
@@ -741,9 +748,10 @@ void tst_QSharedMemory::simpleProcessProducerConsumer()
rememberKey("market");
QProcess producer;
- producer.setProcessChannelMode(QProcess::ForwardedChannels);
producer.start(helperBinary(), QStringList("producer"));
QVERIFY2(producer.waitForStarted(), "Could not start helper binary");
+ QVERIFY2(producer.waitForReadyRead(), "Helper process failed to create shared memory segment: " +
+ producer.readAllStandardError());
QList<QProcess*> consumers;
unsigned int failedProcesses = 0;
@@ -758,8 +766,6 @@ void tst_QSharedMemory::simpleProcessProducerConsumer()
++failedProcesses;
}
- QVERIFY(producer.waitForFinished(5000));
-
bool consumerFailed = false;
while (!consumers.isEmpty()) {
@@ -773,6 +779,11 @@ void tst_QSharedMemory::simpleProcessProducerConsumer()
}
QCOMPARE(consumerFailed, false);
QCOMPARE(failedProcesses, (unsigned int)(0));
+
+ // tell the producer to exit now
+ producer.write("", 1);
+ producer.waitForBytesWritten();
+ QVERIFY(producer.waitForFinished(5000));
}
void tst_QSharedMemory::uniqueKey_data()