summaryrefslogtreecommitdiff
path: root/innobase/thr/ts/tsthr.c
diff options
context:
space:
mode:
Diffstat (limited to 'innobase/thr/ts/tsthr.c')
-rw-r--r--innobase/thr/ts/tsthr.c131
1 files changed, 131 insertions, 0 deletions
diff --git a/innobase/thr/ts/tsthr.c b/innobase/thr/ts/tsthr.c
new file mode 100644
index 00000000000..af5aaa54522
--- /dev/null
+++ b/innobase/thr/ts/tsthr.c
@@ -0,0 +1,131 @@
+/************************************************************************
+The test module for the thread management of Innobase
+
+(c) 1995 Innobase Oy
+
+Created 10/5/1995 Heikki Tuuri
+*************************************************************************/
+
+#include "../thr0loc.h"
+#include "sync0sync.h"
+#include "mem0mem.h"
+#include "os0thread.h"
+#include "os0sync.h"
+#include "ut0ut.h"
+
+ulint val = 500;
+os_event_t event;
+
+/******************************************************************
+Thread start function in test1. */
+
+ulint
+thread1(
+/*====*/
+ void* arg)
+{
+ ulint n;
+
+ thr_local_create();
+
+ n = *((ulint*)arg);
+
+ printf("Thread %lu starts\n", n);
+
+ thr_local_set_slot_no(os_thread_get_curr_id(), n);
+
+ ut_a(n == thr_local_get_slot_no(os_thread_get_curr_id()));
+
+ os_event_wait(event);
+
+ thr_local_free();
+
+ os_thread_exit(0);
+
+ return(0);
+}
+
+/******************************************************************
+Test function for local storage. */
+
+void
+test1(void)
+/*=======*/
+{
+ os_thread_t thr1, thr2, thr3, thr4, thr5;
+ os_thread_id_t id1, id2, id3, id4, id5;
+ ulint tm, oldtm;
+ ulint n1, n2, n3, n4, n5;
+
+ printf("-------------------------------------------\n");
+ printf("THR-TEST 1. Test of local storage\n");
+
+ event = os_event_create(NULL);
+
+ oldtm = ut_clock();
+
+ n1 = 1;
+ thr1 = os_thread_create(thread1,
+ &n1,
+ &id1);
+ n2 = 2;
+ thr2 = os_thread_create(thread1,
+ &n2,
+ &id2);
+ n3 = 3;
+ thr3 = os_thread_create(thread1,
+ &n3,
+ &id3);
+ n4 = 4;
+ thr4 = os_thread_create(thread1,
+ &n4,
+ &id4);
+ n5 = 5;
+ thr5 = os_thread_create(thread1,
+ &n5,
+ &id5);
+
+ os_thread_sleep(500000);
+
+ ut_a(n1 == thr_local_get_slot_no(id1));
+ ut_a(n2 == thr_local_get_slot_no(id2));
+ ut_a(n3 == thr_local_get_slot_no(id3));
+ ut_a(n4 == thr_local_get_slot_no(id4));
+ ut_a(n5 == thr_local_get_slot_no(id5));
+
+ os_event_set(event);
+
+ os_thread_wait(thr1);
+ os_thread_wait(thr2);
+ os_thread_wait(thr3);
+ os_thread_wait(thr4);
+ os_thread_wait(thr5);
+
+ tm = ut_clock();
+ printf("Wall clock time for 5 threads %ld milliseconds\n",
+ tm - oldtm);
+}
+
+/************************************************************************
+Main test function. */
+
+void
+main(void)
+/*======*/
+{
+ ulint tm, oldtm;
+
+ sync_init();
+ mem_init();
+ thr_local_init();
+
+ oldtm = ut_clock();
+
+ test1();
+
+ thr_local_close();
+
+ tm = ut_clock();
+ printf("Wall clock time for test %lu milliseconds\n", tm - oldtm);
+ printf("TESTS COMPLETED SUCCESSFULLY!\n");
+}