From: Bart Van Assche Date: Mon, 7 Jul 2008 16:57:38 +0000 (+0000) Subject: Added Qt4 mutex test. X-Git-Tag: svn/VALGRIND_3_4_0~359 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=998af2412aa4f0ed50e34c20876bb4817e5cf72f;p=thirdparty%2Fvalgrind.git Added Qt4 mutex test. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@8379 --- diff --git a/drd/tests/qt4_mutex.cpp b/drd/tests/qt4_mutex.cpp new file mode 100644 index 0000000000..f90efa5f33 --- /dev/null +++ b/drd/tests/qt4_mutex.cpp @@ -0,0 +1,82 @@ +/// Qt4 mutex test. + +#ifndef _GNU_SOURCE +#define _GNU_SOURCE +#endif + +#include // class QMutex +#include +#include // fprintf() +#include // atoi() +#include +#include // pthread_barrier_t +#include + + +static pthread_barrier_t s_barrier; +static QMutex* s_pMutex; +static int s_iterations; +static int s_counter; + + +class IncThread: public QThread +{ + virtual void run(); +}; + +void IncThread::run() +{ + int i; + + pthread_barrier_wait(&s_barrier); + for (i = s_iterations; i > 0; i--) + { + s_pMutex->lock(); + s_counter++; + s_pMutex->unlock(); + } +} + +int main(int argc, char** argv) +{ + int i; + const int n_threads = 10; + std::vector tid(n_threads); + + s_iterations = argc > 1 ? atoi(argv[1]) : 1000; + + fprintf(stderr, "Start of test.\n"); + + { + // Stack-allocated mutex. + QMutex M(QMutex::Recursive); + M.lock(); + M.tryLock(); + M.unlock(); + M.unlock(); + } + + pthread_barrier_init(&s_barrier, 0, n_threads); + s_pMutex = new QMutex(); + for (i = 0; i < n_threads; i++) + { + tid[i] = new IncThread; + tid[i]->start(); + } + for (i = 0; i < n_threads; i++) + { + tid[i]->wait(); + delete tid[i]; + } + delete s_pMutex; + s_pMutex = 0; + pthread_barrier_destroy(&s_barrier); + + if (s_counter == n_threads * s_iterations) + fprintf(stderr, "Test successful.\n"); + else + fprintf(stderr, "Test failed: counter = %d, should be %d\n", + s_counter, n_threads * s_iterations); + + return 0; +} diff --git a/drd/tests/qt4_mutex.stderr.exp b/drd/tests/qt4_mutex.stderr.exp new file mode 100644 index 0000000000..21dba22019 --- /dev/null +++ b/drd/tests/qt4_mutex.stderr.exp @@ -0,0 +1,5 @@ + +Start of test. +Test successful. + +ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0) diff --git a/drd/tests/qt4_mutex.vgtest b/drd/tests/qt4_mutex.vgtest new file mode 100644 index 0000000000..9dc7a49913 --- /dev/null +++ b/drd/tests/qt4_mutex.vgtest @@ -0,0 +1,2 @@ +vgopts: --check-stack-var=yes +prog: qt4_mutex