mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
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
This commit is contained in:
@ -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(
|
|||||||
#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
|
|||||||
#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(
|
|||||||
}
|
}
|
||||||
|
|
||||||
/********************************************************************
|
/********************************************************************
|
||||||
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(
|
|||||||
|
|
||||||
/*********************************************************************
|
/*********************************************************************
|
||||||
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(
|
|||||||
#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(
|
|||||||
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
|
||||||
|
Reference in New Issue
Block a user