/drd/tests/sigalrm
/drd/tests/std_atomic
/drd/tests/std_list
+/drd/tests/std_mutex
/drd/tests/std_string
/drd/tests/std_thread
/drd/tests/std_thread2
std_atomic.vgtest \
std_list.stderr.exp \
std_list.vgtest \
+ std_mutex.stderr.exp \
+ std_mutex.vgtest \
std_string.stderr.exp \
std_string.vgtest \
std_thread.stderr.exp \
check_PROGRAMS += \
std_atomic \
std_list \
+ std_mutex \
std_string \
std_thread \
std_thread2
std_list_SOURCES = std_list.cpp
std_list_CXXFLAGS = $(AM_CXXFLAGS) -std=c++0x -Wno-sign-compare
+std_mutex_SOURCES = std_mutex.cpp
+std_mutex_CXXFLAGS = $(AM_CXXFLAGS) -std=c++0x -Wno-sign-compare
+
std_string_SOURCES = std_string.cpp
std_string_CXXFLAGS = $(AM_CXXFLAGS) -std=c++0x -Wno-sign-compare
--- /dev/null
+// See also https://bugs.kde.org/show_bug.cgi?id=416286
+
+#include <mutex>
+#include <iostream>
+#include <thread>
+#include <vector>
+
+class counter {
+public:
+ counter(): mutex() {}
+ void get() { std::unique_lock<std::mutex> lock(mutex); }
+
+private:
+ std::mutex mutex;
+};
+
+static counter& get_counter()
+{
+ static counter manager;
+ return manager;
+}
+
+static void do_work()
+{
+ get_counter().get();
+}
+
+int main()
+{
+ std::vector<std::thread> v;
+
+ for (int i = 0; i < 16; i++)
+ v.emplace_back([]{ do_work(); });
+
+ for (auto& t : v)
+ t.join();
+
+ std::cerr << "Done.\n";
+}
--- /dev/null
+
+Done.
+
+ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
--- /dev/null
+prereq: test -e std_mutex && ./supported_libpthread
+vgopts: --check-stack-var=yes --show-confl-seg=no
+prog: std_mutex
+stderr_filter: filter_stderr