diff options
author | unknown <monty@donna.mysql.com> | 2001-02-17 14:19:19 +0200 |
---|---|---|
committer | unknown <monty@donna.mysql.com> | 2001-02-17 14:19:19 +0200 |
commit | 2662b59306ef0cd495fa6e2edf7129e58a11393a (patch) | |
tree | bfe39951a73e906579ab819bf5198ad8f3a64a36 /innobase/os/os0thread.c | |
parent | 66de55a56bdcf2f7a9c0c4f8e19b3e761475e202 (diff) | |
download | mariadb-git-2662b59306ef0cd495fa6e2edf7129e58a11393a.tar.gz |
Added Innobase to source distribution
Docs/manual.texi:
Added Innobase documentation
configure.in:
Incremented version
include/my_base.h:
Added option for Innobase
myisam/mi_check.c:
cleanup
mysql-test/t/bdb.test:
cleanup
mysql-test/t/innobase.test:
Extended with new tests from bdb.test
mysql-test/t/merge.test:
Added test of SHOW create
mysys/my_init.c:
Fix for UNIXWARE 7
scripts/mysql_install_db.sh:
Always write how to start mysqld
scripts/safe_mysqld.sh:
Fixed type
sql/ha_innobase.cc:
Update to new version
sql/ha_innobase.h:
Update to new version
sql/handler.h:
Added 'update_table_comment()' and 'append_create_info()'
sql/sql_delete.cc:
Fixes for Innobase
sql/sql_select.cc:
Fixes for Innobase
sql/sql_show.cc:
Append create information (for MERGE tables)
sql/sql_update.cc:
Fixes for Innobase
Diffstat (limited to 'innobase/os/os0thread.c')
-rw-r--r-- | innobase/os/os0thread.c | 210 |
1 files changed, 210 insertions, 0 deletions
diff --git a/innobase/os/os0thread.c b/innobase/os/os0thread.c new file mode 100644 index 00000000000..a33613267ac --- /dev/null +++ b/innobase/os/os0thread.c @@ -0,0 +1,210 @@ +/****************************************************** +The interface to the operating system +process and thread control primitives + +(c) 1995 Innobase Oy + +Created 9/8/1995 Heikki Tuuri +*******************************************************/ + +#include "os0thread.h" +#ifdef UNIV_NONINL +#include "os0thread.ic" +#endif + +#ifdef __WIN__ +#include <windows.h> +#endif + +/********************************************************************* +Returns the thread identifier of current thread. */ + +os_thread_id_t +os_thread_get_curr_id(void) +/*=======================*/ +{ +#ifdef __WIN__ + return(GetCurrentThreadId()); +#else + return((os_thread_id_t) pthread_self()); +#endif +} + +/* Define a function pointer type to use in a typecast */ +typedef void* (*os_posix_f_t) (void*); + +/******************************************************************** +Creates a new thread of execution. The execution starts from +the function given. The start function takes a void* parameter +and returns an ulint. */ + +os_thread_t +os_thread_create( +/*=============*/ + /* out: handle to the thread */ + ulint (*start_f)(void*), /* in: pointer to function + from which to start */ + void* arg, /* in: argument to start + function */ + os_thread_id_t* thread_id) /* out: id of created + thread */ +{ +#ifdef __WIN__ + os_thread_t thread; + + thread = CreateThread(NULL, /* no security attributes */ + 0, /* default size stack */ + (LPTHREAD_START_ROUTINE)start_f, + arg, + 0, /* thread runs immediately */ + thread_id); + ut_a(thread); + + return(thread); +#else + int ret; + os_thread_t pthread; + + /* Note that below we cast the start function returning an integer + to a function returning a pointer: this may cause error + if the return value is used somewhere! */ + + ret = pthread_create(&pthread, NULL, (os_posix_f_t) start_f, arg); + + return(pthread); +#endif +} + +/********************************************************************* +Returns handle to the current thread. */ + +os_thread_t +os_thread_get_curr(void) +/*=======================*/ +{ +#ifdef __WIN__ + return(GetCurrentThread()); +#else + return(pthread_self()); +#endif +} + +/********************************************************************* +Converts a thread id to a ulint. */ + +ulint +os_thread_conv_id_to_ulint( +/*=======================*/ + /* out: converted to ulint */ + os_thread_id_t id) /* in: thread id */ +{ + return((ulint)id); +} + +/********************************************************************* +Advises the os to give up remainder of the thread's time slice. */ + +void +os_thread_yield(void) +/*=================*/ +{ +#ifdef __WIN__ + Sleep(0); +#else + os_thread_sleep(0); +#endif +} + +/********************************************************************* +The thread sleeps at least the time given in microseconds. */ + +void +os_thread_sleep( +/*============*/ + ulint tm) /* in: time in microseconds */ +{ +#ifdef __WIN__ + Sleep(tm / 1000); +#else + struct timeval t; + + t.tv_sec = 0; + t.tv_usec = tm; + + select(0, NULL, NULL, NULL, &t); +#endif +} + +/********************************************************************** +Sets a thread priority. */ + +void +os_thread_set_priority( +/*===================*/ + os_thread_t handle, /* in: OS handle to the thread */ + ulint pri) /* in: priority */ +{ +#ifdef __WIN__ + int os_pri; + + if (pri == OS_THREAD_PRIORITY_BACKGROUND) { + os_pri = THREAD_PRIORITY_BELOW_NORMAL; + } else if (pri == OS_THREAD_PRIORITY_NORMAL) { + os_pri = THREAD_PRIORITY_NORMAL; + } else if (pri == OS_THREAD_PRIORITY_ABOVE_NORMAL) { + os_pri = THREAD_PRIORITY_HIGHEST; + } else { + ut_error; + } + + ut_a(SetThreadPriority(handle, os_pri)); +#else + UT_NOT_USED(handle); + UT_NOT_USED(pri); +#endif +} + +/********************************************************************** +Gets a thread priority. */ + +ulint +os_thread_get_priority( +/*===================*/ + /* out: priority */ + os_thread_t handle) /* in: OS handle to the thread */ +{ +#ifdef __WIN__ + int os_pri; + ulint pri; + + os_pri = GetThreadPriority(handle); + + if (os_pri == THREAD_PRIORITY_BELOW_NORMAL) { + pri = OS_THREAD_PRIORITY_BACKGROUND; + } else if (os_pri == THREAD_PRIORITY_NORMAL) { + pri = OS_THREAD_PRIORITY_NORMAL; + } else if (os_pri == THREAD_PRIORITY_HIGHEST) { + pri = OS_THREAD_PRIORITY_ABOVE_NORMAL; + } else { + ut_error; + } + + return(pri); +#else + return(0); +#endif +} + +/********************************************************************** +Gets the last operating system error code for the calling thread. */ + +ulint +os_thread_get_last_error(void) +/*==========================*/ +{ +#ifdef __WIN__ + return(GetLastError()); +#else + return(0); +#endif +} |