]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
drd/tests/std_mutex: Add a unit test for std::mutex
authorBart Van Assche <bvanassche@acm.org>
Thu, 16 Jan 2020 03:23:02 +0000 (19:23 -0800)
committerBart Van Assche <bvanassche@acm.org>
Thu, 16 Jan 2020 04:01:40 +0000 (20:01 -0800)
.gitignore
drd/tests/Makefile.am
drd/tests/std_mutex.cpp [new file with mode: 0644]
drd/tests/std_mutex.stderr.exp [new file with mode: 0644]
drd/tests/std_mutex.vgtest [new file with mode: 0644]

index 58dfee04f54fa128ded23502a3c9f65766253853..8e5f0a666dba1546b518f83e0d7c2961ca78be4c 100644 (file)
 /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
index a0da60d0ececb84dd5717981c3b81494892f4114..20c72c24317732fe646628970092777345819418 100644 (file)
@@ -274,6 +274,8 @@ EXTRA_DIST =                                        \
        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                       \
@@ -434,6 +436,7 @@ if HAVE_SHARED_POINTER_ANNOTATION
 check_PROGRAMS += \
   std_atomic      \
   std_list        \
+  std_mutex      \
   std_string      \
   std_thread      \
   std_thread2
@@ -559,6 +562,9 @@ std_atomic_CXXFLAGS         = $(AM_CXXFLAGS) -std=c++0x -Wno-sign-compare
 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
 
diff --git a/drd/tests/std_mutex.cpp b/drd/tests/std_mutex.cpp
new file mode 100644 (file)
index 0000000..7c3333e
--- /dev/null
@@ -0,0 +1,39 @@
+// 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";
+}
diff --git a/drd/tests/std_mutex.stderr.exp b/drd/tests/std_mutex.stderr.exp
new file mode 100644 (file)
index 0000000..d16127f
--- /dev/null
@@ -0,0 +1,4 @@
+
+Done.
+
+ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
diff --git a/drd/tests/std_mutex.vgtest b/drd/tests/std_mutex.vgtest
new file mode 100644 (file)
index 0000000..c592eea
--- /dev/null
@@ -0,0 +1,4 @@
+prereq: test -e std_mutex && ./supported_libpthread
+vgopts: --check-stack-var=yes --show-confl-seg=no
+prog: std_mutex
+stderr_filter: filter_stderr