diff options
author | Karen Arutyunov <karen@codesynthesis.com> | 2017-11-02 23:11:29 +0300 |
---|---|---|
committer | Karen Arutyunov <karen@codesynthesis.com> | 2017-11-24 09:33:15 +0300 |
commit | 354bb40e75d94466e91fe6960523612c9d17ccfb (patch) | |
tree | bdf8b8b90191b98e4b32b62e6cb0e947ea5d5ae2 /mysql/my_thread_local.h | |
parent | 4bce3c574df293415c7b2f45b9c2951262fe3412 (diff) |
Add implementation
Diffstat (limited to 'mysql/my_thread_local.h')
-rw-r--r-- | mysql/my_thread_local.h | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/mysql/my_thread_local.h b/mysql/my_thread_local.h new file mode 100644 index 0000000..fabd71a --- /dev/null +++ b/mysql/my_thread_local.h @@ -0,0 +1,107 @@ +/* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. + + 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-1301, USA */ + +#ifndef MY_THREAD_LOCAL_INCLUDED +#define MY_THREAD_LOCAL_INCLUDED + +#ifndef _WIN32 +#include <pthread.h> +#endif + +struct _db_code_state_; +typedef uint32 my_thread_id; + +C_MODE_START + +#ifdef _WIN32 +typedef DWORD thread_local_key_t; +#else +typedef pthread_key_t thread_local_key_t; +#endif + +static inline int my_create_thread_local_key(thread_local_key_t *key, + void (*destructor)(void *)) +{ +#ifdef _WIN32 + *key= TlsAlloc(); + return (*key == TLS_OUT_OF_INDEXES); +#else + return pthread_key_create(key, destructor); +#endif +} + +static inline int my_delete_thread_local_key(thread_local_key_t key) +{ +#ifdef _WIN32 + return !TlsFree(key); +#else + return pthread_key_delete(key); +#endif +} + +static inline void* my_get_thread_local(thread_local_key_t key) +{ +#ifdef _WIN32 + return TlsGetValue(key); +#else + return pthread_getspecific(key); +#endif +} + +static inline int my_set_thread_local(thread_local_key_t key, + void *value) +{ +#ifdef _WIN32 + return !TlsSetValue(key, value); +#else + return pthread_setspecific(key, value); +#endif +} + +/** + Retrieve the MySQL thread-local storage variant of errno. +*/ +int my_errno(); + +/** + Set the MySQL thread-local storage variant of errno. +*/ +void set_my_errno(int my_errno); + +#ifdef _WIN32 +/* + thr_winerr is used for returning the original OS error-code in Windows, + my_osmaperr() returns EINVAL for all unknown Windows errors, hence we + preserve the original Windows Error code in thr_winerr. +*/ +int thr_winerr(); + +void set_thr_winerr(int winerr); + +#endif + +#ifndef DBUG_OFF +/* Return pointer to DBUG for holding current state */ +struct _db_code_state_ **my_thread_var_dbug(); + +my_thread_id my_thread_var_id(); + +void set_my_thread_var_id(my_thread_id id); + +#endif + +C_MODE_END + +#endif // MY_THREAD_LOCAL_INCLUDED |