summaryrefslogtreecommitdiffstats
path: root/unittest/mysys/thr_template.c
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-04 18:07:14 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-04 18:07:14 +0000
commita175314c3e5827eb193872241446f2f8f5c9d33c (patch)
treecd3d60ca99ae00829c52a6ca79150a5b6e62528b /unittest/mysys/thr_template.c
parentInitial commit. (diff)
downloadmariadb-10.5-upstream.tar.xz
mariadb-10.5-upstream.zip
Adding upstream version 1:10.5.12.upstream/1%10.5.12upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'unittest/mysys/thr_template.c')
-rw-r--r--unittest/mysys/thr_template.c73
1 files changed, 73 insertions, 0 deletions
diff --git a/unittest/mysys/thr_template.c b/unittest/mysys/thr_template.c
new file mode 100644
index 00000000..42e035d9
--- /dev/null
+++ b/unittest/mysys/thr_template.c
@@ -0,0 +1,73 @@
+/* Copyright (c) 2006-2008 MySQL AB, 2009 Sun Microsystems, Inc.
+ Use is subject to license terms.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; version 2 of the License.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA */
+
+#include <my_global.h>
+#include <my_sys.h>
+#include <tap.h>
+
+volatile uint32 bad;
+pthread_mutex_t mutex;
+
+void do_tests();
+
+void test_concurrently(const char *test, pthread_handler handler, int n, int m)
+{
+ pthread_t *threads= malloc(n * sizeof(pthread_t));
+ int i;
+ ulonglong now= my_interval_timer();
+
+ assert(threads);
+ bad= 0;
+
+ diag("Testing %s with %d threads, %d iterations... ", test, n, m);
+ for (i= 0; i < n; i++)
+ {
+ if (pthread_create(&threads[i], 0, handler, &m) != 0)
+ {
+ diag("Could not create thread");
+ abort();
+ }
+ }
+
+ for (i= 0; i < n; i++)
+ pthread_join(threads[i], 0);
+
+ now= my_interval_timer() - now;
+ free(threads);
+ ok(!bad, "tested %s in %g secs (%d)", test, ((double)now)/1e9, bad);
+}
+
+int main(int argc __attribute__((unused)), char **argv)
+{
+ MY_INIT(argv[0]);
+
+ if (argv[1] && *argv[1])
+ DBUG_SET_INITIAL(argv[1]);
+
+ pthread_mutex_init(&mutex, 0);
+
+#define CYCLES 3000
+#define THREADS 30
+
+ diag("N CPUs: %d", my_getncpus());
+
+ do_tests();
+
+ pthread_mutex_destroy(&mutex);
+ my_end(0);
+ return exit_status();
+}
+