Commit 465e56b0 authored by unknown's avatar unknown

os0thread.h, os0thread.c:

  Fix a critical portability bug introduced in the Windows version


innobase/os/os0thread.c:
  Fix a critical portability bug introduced in the Windows version
innobase/include/os0thread.h:
  Fix a critical portability bug introduced in the Windows version
parent 9a78f2fe
...@@ -25,33 +25,37 @@ can wait inside InnoDB */ ...@@ -25,33 +25,37 @@ can wait inside InnoDB */
#ifdef __WIN__ #ifdef __WIN__
typedef void* os_thread_t; typedef void* os_thread_t;
typedef ulint os_thread_id_t; /* In Windows the thread id
is an unsigned long int */
#else #else
typedef pthread_t os_thread_t; typedef pthread_t os_thread_t;
typedef os_thread_t os_thread_id_t; /* In Unix we use the thread
handle itself as the id of
the thread */
#endif #endif
#define os_thread_id_t os_thread_t
/* Define a function pointer type to use in a typecast */ /* Define a function pointer type to use in a typecast */
typedef void* (*os_posix_f_t) (void*); typedef void* (*os_posix_f_t) (void*);
/******************************************************************* /*******************************************************************
Compares two threads or thread ids for equality */ Compares two thread ids for equality. */
ibool ibool
os_thread_eq( os_thread_eq(
/*=========*/ /*=========*/
/* out: TRUE if equal */ /* out: TRUE if equal */
os_thread_t a, /* in: OS thread or thread id */ os_thread_id_t a, /* in: OS thread or thread id */
os_thread_t b); /* in: OS thread or thread id */ os_thread_id_t b); /* in: OS thread or thread id */
/******************************************************************** /********************************************************************
Converts an OS thread or thread id to a ulint. It is NOT guaranteed that Converts an OS thread id to a ulint. It is NOT guaranteed that the ulint is
the ulint is unique for the thread though! */ unique for the thread though! */
ulint ulint
os_thread_pf( os_thread_pf(
/*=========*/ /*=========*/
/* out: unsigned long int */ /* out: unsigned long int */
os_thread_t a); /* in: thread or thread id */ os_thread_id_t a); /* in: thread or thread id */
/******************************************************************** /********************************************************************
Creates a new thread of execution. The execution starts from Creates a new thread of execution. The execution starts from
the function given. The start function takes a void* parameter the function given. The start function takes a void* parameter
...@@ -69,10 +73,8 @@ os_thread_create( ...@@ -69,10 +73,8 @@ os_thread_create(
#endif #endif
void* arg, /* in: argument to start void* arg, /* in: argument to start
function */ function */
os_thread_id_t* thread_id); /* out: id of created os_thread_id_t* thread_id); /* out: id of the created
thread; currently this is thread */
identical to the handle to
the thread */
/********************************************************************* /*********************************************************************
A thread calling this function ends its execution. */ A thread calling this function ends its execution. */
......
...@@ -19,14 +19,14 @@ Created 9/8/1995 Heikki Tuuri ...@@ -19,14 +19,14 @@ Created 9/8/1995 Heikki Tuuri
#include "srv0srv.h" #include "srv0srv.h"
/******************************************************************* /*******************************************************************
Compares two threads or thread ids for equality */ Compares two thread ids for equality. */
ibool ibool
os_thread_eq( os_thread_eq(
/*=========*/ /*=========*/
/* out: TRUE if equal */ /* out: TRUE if equal */
os_thread_t a, /* in: OS thread or thread id */ os_thread_id_t a, /* in: OS thread or thread id */
os_thread_t b) /* in: OS thread or thread id */ os_thread_id_t b) /* in: OS thread or thread id */
{ {
#ifdef __WIN__ #ifdef __WIN__
if (a == b) { if (a == b) {
...@@ -44,13 +44,13 @@ os_thread_eq( ...@@ -44,13 +44,13 @@ os_thread_eq(
} }
/******************************************************************** /********************************************************************
Converts an OS thread or thread id to a ulint. It is NOT guaranteed that Converts an OS thread id to a ulint. It is NOT guaranteed that the ulint is
the ulint is unique for the thread though! */ unique for the thread though! */
ulint ulint
os_thread_pf( os_thread_pf(
/*=========*/ /*=========*/
os_thread_t a) os_thread_id_t a)
{ {
#ifdef UNIV_HPUX #ifdef UNIV_HPUX
/* In HP-UX a pthread_t is a struct of 3 fields: field1, field2, /* In HP-UX a pthread_t is a struct of 3 fields: field1, field2,
...@@ -64,15 +64,15 @@ os_thread_pf( ...@@ -64,15 +64,15 @@ os_thread_pf(
/********************************************************************* /*********************************************************************
Returns the thread identifier of current thread. Currently the thread Returns the thread identifier of current thread. Currently the thread
identifier is the thread handle itself. Note that in HP-UX pthread_t is identifier in Unix is the thread handle itself. Note that in HP-UX
a struct of 3 fields. */ pthread_t is a struct of 3 fields. */
os_thread_id_t os_thread_id_t
os_thread_get_curr_id(void) os_thread_get_curr_id(void)
/*=======================*/ /*=======================*/
{ {
#ifdef __WIN__ #ifdef __WIN__
return(GetCurrentThread()); return(GetCurrentThreadId());
#else #else
return(pthread_self()); return(pthread_self());
#endif #endif
...@@ -95,10 +95,8 @@ os_thread_create( ...@@ -95,10 +95,8 @@ os_thread_create(
#endif #endif
void* arg, /* in: argument to start void* arg, /* in: argument to start
function */ function */
os_thread_id_t* thread_id) /* out: id of created os_thread_id_t* thread_id) /* out: id of the created
thread; currently this is thread */
identical to the handle to
the thread */
{ {
#ifdef __WIN__ #ifdef __WIN__
os_thread_t thread; os_thread_t thread;
...@@ -120,7 +118,7 @@ os_thread_create( ...@@ -120,7 +118,7 @@ os_thread_create(
ut_a(SetThreadPriority(thread, srv_query_thread_priority)); ut_a(SetThreadPriority(thread, srv_query_thread_priority));
} }
*thread_id = thread; *thread_id = win_thread_id;
return(thread); return(thread);
#else #else
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment