diff options
author | monty@work.mysql.com <> | 2001-09-02 18:38:33 +0200 |
---|---|---|
committer | monty@work.mysql.com <> | 2001-09-02 18:38:33 +0200 |
commit | 447c18954e904e5770d64ae3b0817a16b9060b74 (patch) | |
tree | 4689ffbe50e97ce9a47deb58fa2b9e7decdfc6a8 /include/my_pthread.h | |
parent | 102cabfe4acd9c78fe321829bd168342b3fbd68a (diff) | |
parent | 759cf54a9e70013d92fe18a84b3e4c56244de7da (diff) | |
download | mariadb-git-447c18954e904e5770d64ae3b0817a16b9060b74.tar.gz |
merge with 3.23.42
Diffstat (limited to 'include/my_pthread.h')
-rw-r--r-- | include/my_pthread.h | 64 |
1 files changed, 51 insertions, 13 deletions
diff --git a/include/my_pthread.h b/include/my_pthread.h index 487e8d07e5e..14ccd93a96c 100644 --- a/include/my_pthread.h +++ b/include/my_pthread.h @@ -25,13 +25,23 @@ #define ETIME ETIMEDOUT /* For FreeBSD */ #endif -#ifdef __cplusplus +#ifdef __cplusplus extern "C" { -#endif +#endif /* __cplusplus */ + +#if defined(__WIN__) || defined(OS2) -#if defined(__WIN__) +#ifdef OS2 +typedef ULONG HANDLE; +typedef ULONG DWORD; +typedef int sigset_t; +#endif +#ifdef OS2 +typedef HMTX pthread_mutex_t; +#else typedef CRITICAL_SECTION pthread_mutex_t; +#endif typedef HANDLE pthread_t; typedef struct thread_attr { DWORD dwStackSize ; @@ -50,19 +60,30 @@ typedef struct st_pthread_link { typedef struct { uint32 waiting; +#ifdef OS2 + HEV semaphore; +#else HANDLE semaphore; +#endif } pthread_cond_t; +#ifndef OS2 struct timespec { /* For pthread_cond_timedwait() */ time_t tv_sec; long tv_nsec; }; +#endif typedef int pthread_mutexattr_t; #define win_pthread_self my_thread_var->pthread_self +#ifdef OS2 +#define pthread_handler_decl(A,B) void * _Optlink A(void *B) +typedef void * (_Optlink *pthread_handler)(void *); +#else #define pthread_handler_decl(A,B) void * __cdecl A(void *B) typedef void * (__cdecl *pthread_handler)(void *); +#endif void win_pthread_init(void); int win_pthread_setspecific(void *A,void *B,uint length); @@ -82,12 +103,14 @@ struct tm *localtime_r(const time_t *timep,struct tm *tmp); void pthread_exit(void *a); /* was #define pthread_exit(A) ExitThread(A)*/ +#ifndef OS2 #define ETIMEDOUT 145 /* Win32 doesn't have this */ #define getpid() GetCurrentThreadId() +#endif #define pthread_self() win_pthread_self -#define HAVE_LOCALTIME_R -#define _REENTRANT -#define HAVE_PTHREAD_ATTR_SETSTACKSIZE +#define HAVE_LOCALTIME_R 1 +#define _REENTRANT 1 +#define HAVE_PTHREAD_ATTR_SETSTACKSIZE 1 #ifdef USE_TLS /* For LIBMYSQL.DLL */ #undef SAFE_MUTEX /* This will cause conflicts */ @@ -109,13 +132,23 @@ void pthread_exit(void *a); /* was #define pthread_exit(A) ExitThread(A)*/ #endif /* USE_TLS */ #define pthread_equal(A,B) ((A) == (B)) +#ifdef OS2 +int pthread_mutex_init (pthread_mutex_t *, const pthread_mutexattr_t *); +int pthread_mutex_lock (pthread_mutex_t *); +int pthread_mutex_unlock (pthread_mutex_t *); +int pthread_mutex_destroy (pthread_mutex_t *); +#define my_pthread_setprio(A,B) DosSetPriority(PRTYS_THREAD,PRTYC_NOCHANGE, B, A) +#define pthread_kill(A,B) raise(B) +#else #define pthread_mutex_init(A,B) InitializeCriticalSection(A) #define pthread_mutex_lock(A) (EnterCriticalSection(A),0) #define pthread_mutex_unlock(A) LeaveCriticalSection(A) #define pthread_mutex_destroy(A) DeleteCriticalSection(A) #define my_pthread_setprio(A,B) SetThreadPriority(GetCurrentThread(), (B)) -/* Dummy defines for easier code */ #define pthread_kill(A,B) pthread_dummy(0) +#endif /* OS2 */ + +/* Dummy defines for easier code */ #define pthread_attr_setdetachstate(A,B) pthread_dummy(0) #define my_pthread_attr_setprio(A,B) pthread_attr_setprio(A,B) #define pthread_attr_setscope(A,B) @@ -315,12 +348,15 @@ extern void my_pthread_attr_setprio(pthread_attr_t *attr, int priority); #undef HAVE_GETHOSTBYADDR_R /* No definition */ #endif -#ifndef HAVE_NONPOSIX_PTHREAD_GETSPECIFIC +#if defined(OS2) +#define my_pthread_getspecific(T,A) ((T) &(A)) +#define pthread_setspecific(A,B) win_pthread_setspecific(&(A),(B),sizeof(A)) +#elif !defined( HAVE_NONPOSIX_PTHREAD_GETSPECIFIC) #define my_pthread_getspecific(A,B) ((A) pthread_getspecific(B)) #else #define my_pthread_getspecific(A,B) ((A) my_pthread_getspecific_imp(B)) void *my_pthread_getspecific_imp(pthread_key_t key); -#endif +#endif /* OS2 */ #ifndef HAVE_LOCALTIME_R struct tm *localtime_r(const time_t *clock, struct tm *res); @@ -539,12 +575,14 @@ extern int pthread_dummy(int); struct st_my_thread_var { int thr_errno; - pthread_cond_t suspend, *current_cond; - pthread_mutex_t mutex, *current_mutex; + pthread_cond_t suspend; + pthread_mutex_t mutex; + pthread_mutex_t * volatile current_mutex; + pthread_cond_t * volatile current_cond; pthread_t pthread_self; long id; int cmp_length; - volatile int abort; + int volatile abort; #ifndef DBUG_OFF gptr dbug; char name[THREAD_NAME_SIZE+1]; @@ -581,7 +619,7 @@ extern struct st_my_thread_var *_my_thread_var(void) __attribute__ ((const)); #endif /* HAVE_ATOMIC_ADD */ #endif /* thread_safe_increment */ -#ifdef __cplusplus +#ifdef __cplusplus } #endif #endif /* _my_ptread_h */ |