Cleanup: Remove os0thread

Let us use the common pthread_t wrapper for Microsoft Windows.

This fixes up commit dbe941e06f
This commit is contained in:
Marko Mäkelä 2022-04-19 13:49:52 +03:00
commit d1edb011ee
17 changed files with 54 additions and 133 deletions

View file

@ -1,6 +1,6 @@
# Copyright (c) 2006, 2017, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2006, 2017, Oracle and/or its affiliates. All rights reserved.
# Copyright (c) 2014, 2021, MariaDB Corporation. # Copyright (c) 2014, 2022, MariaDB Corporation.
# #
# This program is free software; you can redistribute it and/or modify # 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 # it under the terms of the GNU General Public License as published by
@ -186,7 +186,6 @@ SET(INNOBASE_SOURCES
include/mtr0types.h include/mtr0types.h
include/os0file.h include/os0file.h
include/os0file.inl include/os0file.inl
include/os0thread.h
include/page0cur.h include/page0cur.h
include/page0cur.inl include/page0cur.inl
include/page0page.h include/page0page.h
@ -283,7 +282,6 @@ SET(INNOBASE_SOURCES
mem/mem0mem.cc mem/mem0mem.cc
mtr/mtr0mtr.cc mtr/mtr0mtr.cc
os/os0file.cc os/os0file.cc
os/os0thread.cc
page/page0cur.cc page/page0cur.cc
page/page0page.cc page/page0page.cc
page/page0zip.cc page/page0zip.cc

View file

@ -1,7 +1,7 @@
/***************************************************************************** /*****************************************************************************
Copyright (c) 2011, 2017, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2011, 2017, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2017, 2021, MariaDB Corporation. Copyright (c) 2017, 2022, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it under 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 the terms of the GNU General Public License as published by the Free Software
@ -35,7 +35,6 @@ Created April 08, 2011 Vasil Dimov
#include "buf0dump.h" #include "buf0dump.h"
#include "dict0dict.h" #include "dict0dict.h"
#include "os0file.h" #include "os0file.h"
#include "os0thread.h"
#include "srv0srv.h" #include "srv0srv.h"
#include "srv0start.h" #include "srv0start.h"
#include "ut0byte.h" #include "ut0byte.h"

View file

@ -1952,10 +1952,10 @@ struct dict_table_t {
#ifdef UNIV_DEBUG #ifdef UNIV_DEBUG
/** @return whether the current thread holds the lock_mutex */ /** @return whether the current thread holds the lock_mutex */
bool lock_mutex_is_owner() const bool lock_mutex_is_owner() const
{ return lock_mutex_owner == os_thread_get_curr_id(); } { return lock_mutex_owner == pthread_self(); }
/** @return whether the current thread holds the stats_mutex (lock_mutex) */ /** @return whether the current thread holds the stats_mutex (lock_mutex) */
bool stats_mutex_is_owner() const bool stats_mutex_is_owner() const
{ return lock_mutex_owner == os_thread_get_curr_id(); } { return lock_mutex_owner == pthread_self(); }
#endif /* UNIV_DEBUG */ #endif /* UNIV_DEBUG */
void lock_mutex_init() { lock_mutex.init(); } void lock_mutex_init() { lock_mutex.init(); }
void lock_mutex_destroy() { lock_mutex.destroy(); } void lock_mutex_destroy() { lock_mutex.destroy(); }
@ -1964,20 +1964,20 @@ struct dict_table_t {
{ {
ut_ad(!lock_mutex_is_owner()); ut_ad(!lock_mutex_is_owner());
lock_mutex.wr_lock(); lock_mutex.wr_lock();
ut_ad(!lock_mutex_owner.exchange(os_thread_get_curr_id())); ut_ad(!lock_mutex_owner.exchange(pthread_self()));
} }
/** Try to acquire lock_mutex */ /** Try to acquire lock_mutex */
bool lock_mutex_trylock() bool lock_mutex_trylock()
{ {
ut_ad(!lock_mutex_is_owner()); ut_ad(!lock_mutex_is_owner());
bool acquired= lock_mutex.wr_lock_try(); bool acquired= lock_mutex.wr_lock_try();
ut_ad(!acquired || !lock_mutex_owner.exchange(os_thread_get_curr_id())); ut_ad(!acquired || !lock_mutex_owner.exchange(pthread_self()));
return acquired; return acquired;
} }
/** Release lock_mutex */ /** Release lock_mutex */
void lock_mutex_unlock() void lock_mutex_unlock()
{ {
ut_ad(lock_mutex_owner.exchange(0) == os_thread_get_curr_id()); ut_ad(lock_mutex_owner.exchange(0) == pthread_self());
lock_mutex.wr_unlock(); lock_mutex.wr_unlock();
} }
#ifndef SUX_LOCK_GENERIC #ifndef SUX_LOCK_GENERIC
@ -2279,7 +2279,7 @@ private:
srw_spin_mutex lock_mutex; srw_spin_mutex lock_mutex;
#ifdef UNIV_DEBUG #ifdef UNIV_DEBUG
/** The owner of lock_mutex (0 if none) */ /** The owner of lock_mutex (0 if none) */
Atomic_relaxed<os_thread_id_t> lock_mutex_owner{0}; Atomic_relaxed<pthread_t> lock_mutex_owner{0};
#endif #endif
public: public:
/** Autoinc counter value to give to the next inserted row. */ /** Autoinc counter value to give to the next inserted row. */

View file

@ -1,7 +1,7 @@
/***************************************************************************** /*****************************************************************************
Copyright (c) 2012, 2017, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2012, 2017, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2017, 2021, MariaDB Corporation. Copyright (c) 2017, 2022, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it under 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 the terms of the GNU General Public License as published by the Free Software
@ -28,7 +28,6 @@ Created Apr 26, 2012 Vasil Dimov
#define dict0stats_bg_h #define dict0stats_bg_h
#include "dict0types.h" #include "dict0types.h"
#include "os0thread.h"
#ifdef HAVE_PSI_INTERFACE #ifdef HAVE_PSI_INTERFACE
extern mysql_pfs_key_t recalc_pool_mutex_key; extern mysql_pfs_key_t recalc_pool_mutex_key;

View file

@ -412,7 +412,7 @@ private:
static constexpr uint32_t PENDING= ~(STOPPING | CLOSING | NEEDS_FSYNC); static constexpr uint32_t PENDING= ~(STOPPING | CLOSING | NEEDS_FSYNC);
/** latch protecting all page allocation bitmap pages */ /** latch protecting all page allocation bitmap pages */
srw_lock latch; srw_lock latch;
os_thread_id_t latch_owner; pthread_t latch_owner;
ut_d(Atomic_relaxed<uint32_t> latch_count;) ut_d(Atomic_relaxed<uint32_t> latch_count;)
public: public:
/** MariaDB encryption data */ /** MariaDB encryption data */
@ -1040,20 +1040,20 @@ public:
#ifdef UNIV_DEBUG #ifdef UNIV_DEBUG
bool is_latched() const { return latch_count != 0; } bool is_latched() const { return latch_count != 0; }
#endif #endif
bool is_owner() const { return latch_owner == os_thread_get_curr_id(); } bool is_owner() const { return latch_owner == pthread_self(); }
/** Acquire the allocation latch in exclusive mode */ /** Acquire the allocation latch in exclusive mode */
void x_lock() void x_lock()
{ {
latch.wr_lock(SRW_LOCK_CALL); latch.wr_lock(SRW_LOCK_CALL);
ut_ad(!latch_owner); ut_ad(!latch_owner);
latch_owner= os_thread_get_curr_id(); latch_owner= pthread_self();
ut_ad(!latch_count.fetch_add(1)); ut_ad(!latch_count.fetch_add(1));
} }
/** Release the allocation latch from exclusive mode */ /** Release the allocation latch from exclusive mode */
void x_unlock() void x_unlock()
{ {
ut_ad(latch_count.fetch_sub(1) == 1); ut_ad(latch_count.fetch_sub(1) == 1);
ut_ad(latch_owner == os_thread_get_curr_id()); ut_ad(latch_owner == pthread_self());
latch_owner= 0; latch_owner= 0;
latch.wr_unlock(); latch.wr_unlock();
} }

View file

@ -687,7 +687,7 @@ private:
alignas(CPU_LEVEL1_DCACHE_LINESIZE) srw_spin_lock latch; alignas(CPU_LEVEL1_DCACHE_LINESIZE) srw_spin_lock latch;
#ifdef UNIV_DEBUG #ifdef UNIV_DEBUG
/** The owner of exclusive latch (0 if none); protected by latch */ /** The owner of exclusive latch (0 if none); protected by latch */
std::atomic<os_thread_id_t> writer{0}; std::atomic<pthread_t> writer{0};
/** Number of shared latches */ /** Number of shared latches */
std::atomic<ulint> readers{0}; std::atomic<ulint> readers{0};
#endif #endif
@ -751,14 +751,14 @@ public:
mysql_mutex_assert_not_owner(&wait_mutex); mysql_mutex_assert_not_owner(&wait_mutex);
ut_ad(!is_writer()); ut_ad(!is_writer());
latch.wr_lock(); latch.wr_lock();
ut_ad(!writer.exchange(os_thread_get_curr_id(), ut_ad(!writer.exchange(pthread_self(),
std::memory_order_relaxed)); std::memory_order_relaxed));
} }
/** Release exclusive lock_sys.latch */ /** Release exclusive lock_sys.latch */
void wr_unlock() void wr_unlock()
{ {
ut_ad(writer.exchange(0, std::memory_order_relaxed) == ut_ad(writer.exchange(0, std::memory_order_relaxed) ==
os_thread_get_curr_id()); pthread_self());
latch.wr_unlock(); latch.wr_unlock();
} }
/** Acquire shared lock_sys.latch */ /** Acquire shared lock_sys.latch */
@ -784,7 +784,7 @@ public:
{ {
ut_ad(!is_writer()); ut_ad(!is_writer());
if (!latch.wr_lock_try()) return false; if (!latch.wr_lock_try()) return false;
ut_ad(!writer.exchange(os_thread_get_curr_id(), ut_ad(!writer.exchange(pthread_self(),
std::memory_order_relaxed)); std::memory_order_relaxed));
return true; return true;
} }
@ -808,9 +808,9 @@ public:
bool is_writer() const bool is_writer() const
{ {
# ifdef SUX_LOCK_GENERIC # ifdef SUX_LOCK_GENERIC
return writer.load(std::memory_order_relaxed) == os_thread_get_curr_id(); return writer.load(std::memory_order_relaxed) == pthread_self();
# else # else
return writer.load(std::memory_order_relaxed) == os_thread_get_curr_id() || return writer.load(std::memory_order_relaxed) == pthread_self() ||
(xtest() && !latch.is_locked_or_waiting()); (xtest() && !latch.is_locked_or_waiting());
# endif # endif
} }

View file

@ -1,42 +0,0 @@
/*****************************************************************************
Copyright (c) 1995, 2016, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2017, 2021, MariaDB Corporation.
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 Street, Fifth Floor, Boston, MA 02110-1335 USA
*****************************************************************************/
/**************************************************//**
@file include/os0thread.h
The interface to the operating system
process and thread control primitives
Created 9/8/1995 Heikki Tuuri
*******************************************************/
#pragma once
#include "univ.i"
#ifdef _WIN32
typedef DWORD os_thread_id_t; /*!< In Windows the thread id
is an unsigned long int */
#else
typedef pthread_t os_thread_id_t; /*!< In Unix we use the thread
handle itself as the id of
the thread */
#endif /* _WIN32 */
#define os_thread_eq(a,b) IF_WIN(a == b, pthread_equal(a, b))
#define os_thread_get_curr_id() IF_WIN(GetCurrentThreadId(), pthread_self())

View file

@ -1,6 +1,6 @@
/***************************************************************************** /*****************************************************************************
Copyright (c) 2020, 2021, MariaDB Corporation. Copyright (c) 2020, 2022, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it under 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 the terms of the GNU General Public License as published by the Free Software
@ -19,7 +19,6 @@ this program; if not, write to the Free Software Foundation, Inc.,
#pragma once #pragma once
#include "srw_lock.h" #include "srw_lock.h"
#include "my_atomic_wrapper.h" #include "my_atomic_wrapper.h"
#include "os0thread.h"
#ifdef UNIV_DEBUG #ifdef UNIV_DEBUG
# include <unordered_set> # include <unordered_set>
#endif #endif
@ -36,19 +35,19 @@ class sux_lock final
/** Numbers of U and X locks. Protected by lock. */ /** Numbers of U and X locks. Protected by lock. */
uint32_t recursive; uint32_t recursive;
/** The owner of the U or X lock (0 if none); protected by lock */ /** The owner of the U or X lock (0 if none); protected by lock */
std::atomic<os_thread_id_t> writer; std::atomic<pthread_t> writer;
/** Special writer!=0 value to indicate that the lock is non-recursive /** Special writer!=0 value to indicate that the lock is non-recursive
and will be released by an I/O thread */ and will be released by an I/O thread */
#if defined __linux__ || defined _WIN32 #if defined __linux__ || defined _WIN32
static constexpr os_thread_id_t FOR_IO= os_thread_id_t(~0UL); static constexpr pthread_t FOR_IO= pthread_t(~0UL);
#else #else
# define FOR_IO ((os_thread_id_t) ~0UL) /* it could be a pointer */ # define FOR_IO ((pthread_t) ~0UL) /* it could be a pointer */
#endif #endif
#ifdef UNIV_DEBUG #ifdef UNIV_DEBUG
/** Protects readers */ /** Protects readers */
mutable srw_mutex readers_lock; mutable srw_mutex readers_lock;
/** Threads that hold the lock in shared mode */ /** Threads that hold the lock in shared mode */
std::atomic<std::unordered_multiset<os_thread_id_t>*> readers; std::atomic<std::unordered_multiset<pthread_t>*> readers;
#endif #endif
/** The multiplier in recursive for X locks */ /** The multiplier in recursive for X locks */
@ -109,7 +108,7 @@ public:
/** Acquire a recursive lock */ /** Acquire a recursive lock */
template<bool allow_readers> void writer_recurse() template<bool allow_readers> void writer_recurse()
{ {
ut_ad(writer == os_thread_get_curr_id()); ut_ad(writer == pthread_self());
ut_d(auto rec= (recursive / (allow_readers ? RECURSIVE_U : RECURSIVE_X)) & ut_d(auto rec= (recursive / (allow_readers ? RECURSIVE_U : RECURSIVE_X)) &
RECURSIVE_MAX); RECURSIVE_MAX);
ut_ad(allow_readers ? recursive : rec); ut_ad(allow_readers ? recursive : rec);
@ -120,14 +119,14 @@ public:
private: private:
/** Transfer the ownership of a write lock to another thread /** Transfer the ownership of a write lock to another thread
@param id the new owner of the U or X lock */ @param id the new owner of the U or X lock */
void set_new_owner(os_thread_id_t id) void set_new_owner(pthread_t id)
{ {
IF_DBUG(DBUG_ASSERT(writer.exchange(id, std::memory_order_relaxed)), IF_DBUG(DBUG_ASSERT(writer.exchange(id, std::memory_order_relaxed)),
writer.store(id, std::memory_order_relaxed)); writer.store(id, std::memory_order_relaxed));
} }
/** Assign the ownership of a write lock to a thread /** Assign the ownership of a write lock to a thread
@param id the owner of the U or X lock */ @param id the owner of the U or X lock */
void set_first_owner(os_thread_id_t id) void set_first_owner(pthread_t id)
{ {
IF_DBUG(DBUG_ASSERT(!writer.exchange(id, std::memory_order_relaxed)), IF_DBUG(DBUG_ASSERT(!writer.exchange(id, std::memory_order_relaxed)),
writer.store(id, std::memory_order_relaxed)); writer.store(id, std::memory_order_relaxed));
@ -136,12 +135,12 @@ private:
/** Register the current thread as a holder of a shared lock */ /** Register the current thread as a holder of a shared lock */
void s_lock_register() void s_lock_register()
{ {
const os_thread_id_t id= os_thread_get_curr_id(); const pthread_t id= pthread_self();
readers_lock.wr_lock(); readers_lock.wr_lock();
auto r= readers.load(std::memory_order_relaxed); auto r= readers.load(std::memory_order_relaxed);
if (!r) if (!r)
{ {
r= new std::unordered_multiset<os_thread_id_t>(); r= new std::unordered_multiset<pthread_t>();
readers.store(r, std::memory_order_relaxed); readers.store(r, std::memory_order_relaxed);
} }
r->emplace(id); r->emplace(id);
@ -152,12 +151,12 @@ private:
public: public:
/** In crash recovery or the change buffer, claim the ownership /** In crash recovery or the change buffer, claim the ownership
of the exclusive block lock to the current thread */ of the exclusive block lock to the current thread */
void claim_ownership() { set_new_owner(os_thread_get_curr_id()); } void claim_ownership() { set_new_owner(pthread_self()); }
/** @return whether the current thread is holding X or U latch */ /** @return whether the current thread is holding X or U latch */
bool have_u_or_x() const bool have_u_or_x() const
{ {
if (os_thread_get_curr_id() != writer.load(std::memory_order_relaxed)) if (pthread_self() != writer.load(std::memory_order_relaxed))
return false; return false;
ut_ad(recursive); ut_ad(recursive);
return true; return true;
@ -175,7 +174,7 @@ public:
if (auto r= readers.load(std::memory_order_relaxed)) if (auto r= readers.load(std::memory_order_relaxed))
{ {
readers_lock.wr_lock(); readers_lock.wr_lock();
bool found= r->find(os_thread_get_curr_id()) != r->end(); bool found= r->find(pthread_self()) != r->end();
readers_lock.wr_unlock(); readers_lock.wr_unlock();
return found; return found;
} }
@ -233,7 +232,7 @@ public:
void s_unlock() void s_unlock()
{ {
#ifdef UNIV_DEBUG #ifdef UNIV_DEBUG
const os_thread_id_t id= os_thread_get_curr_id(); const pthread_t id= pthread_self();
auto r= readers.load(std::memory_order_relaxed); auto r= readers.load(std::memory_order_relaxed);
ut_ad(r); ut_ad(r);
readers_lock.wr_lock(); readers_lock.wr_lock();
@ -250,7 +249,7 @@ public:
void u_or_x_unlock(bool allow_readers, bool claim_ownership= false) void u_or_x_unlock(bool allow_readers, bool claim_ownership= false)
{ {
ut_d(auto owner= writer.load(std::memory_order_relaxed)); ut_d(auto owner= writer.load(std::memory_order_relaxed));
ut_ad(owner == os_thread_get_curr_id() || ut_ad(owner == pthread_self() ||
(owner == FOR_IO && claim_ownership && (owner == FOR_IO && claim_ownership &&
recursive == (allow_readers ? RECURSIVE_U : RECURSIVE_X))); recursive == (allow_readers ? RECURSIVE_U : RECURSIVE_X)));
ut_d(auto rec= (recursive / (allow_readers ? RECURSIVE_U : RECURSIVE_X)) & ut_d(auto rec= (recursive / (allow_readers ? RECURSIVE_U : RECURSIVE_X)) &
@ -314,7 +313,7 @@ inline void sux_lock<ssux_lock>::s_lock(const char *file, unsigned line)
template<> template<>
inline void sux_lock<ssux_lock>::u_lock(const char *file, unsigned line) inline void sux_lock<ssux_lock>::u_lock(const char *file, unsigned line)
{ {
os_thread_id_t id= os_thread_get_curr_id(); pthread_t id= pthread_self();
if (writer.load(std::memory_order_relaxed) == id) if (writer.load(std::memory_order_relaxed) == id)
writer_recurse<true>(); writer_recurse<true>();
else else
@ -329,7 +328,7 @@ inline void sux_lock<ssux_lock>::u_lock(const char *file, unsigned line)
template<> template<>
inline void sux_lock<ssux_lock>::x_lock(const char *file, unsigned line) inline void sux_lock<ssux_lock>::x_lock(const char *file, unsigned line)
{ {
os_thread_id_t id= os_thread_get_curr_id(); pthread_t id= pthread_self();
if (writer.load(std::memory_order_relaxed) == id) if (writer.load(std::memory_order_relaxed) == id)
writer_recurse<false>(); writer_recurse<false>();
else else
@ -371,7 +370,7 @@ inline void sux_lock<ssux>::unlock_shared() { s_unlock(); }
template<typename ssux> inline void sux_lock<ssux>::u_lock() template<typename ssux> inline void sux_lock<ssux>::u_lock()
{ {
os_thread_id_t id= os_thread_get_curr_id(); pthread_t id= pthread_self();
if (writer.load(std::memory_order_relaxed) == id) if (writer.load(std::memory_order_relaxed) == id)
writer_recurse<true>(); writer_recurse<true>();
else else
@ -385,7 +384,7 @@ template<typename ssux> inline void sux_lock<ssux>::u_lock()
template<typename ssux> inline void sux_lock<ssux>::x_lock(bool for_io) template<typename ssux> inline void sux_lock<ssux>::x_lock(bool for_io)
{ {
os_thread_id_t id= os_thread_get_curr_id(); pthread_t id= pthread_self();
if (writer.load(std::memory_order_relaxed) == id) if (writer.load(std::memory_order_relaxed) == id)
{ {
ut_ad(!for_io); ut_ad(!for_io);
@ -409,7 +408,7 @@ template<typename ssux> inline void sux_lock<ssux>::u_x_upgrade()
template<typename ssux> inline bool sux_lock<ssux>::x_lock_upgraded() template<typename ssux> inline bool sux_lock<ssux>::x_lock_upgraded()
{ {
os_thread_id_t id= os_thread_get_curr_id(); pthread_t id= pthread_self();
if (writer.load(std::memory_order_relaxed) == id) if (writer.load(std::memory_order_relaxed) == id)
{ {
ut_ad(recursive); ut_ad(recursive);
@ -436,7 +435,7 @@ template<typename ssux> inline bool sux_lock<ssux>::x_lock_upgraded()
template<typename ssux> inline bool sux_lock<ssux>::u_lock_try(bool for_io) template<typename ssux> inline bool sux_lock<ssux>::u_lock_try(bool for_io)
{ {
os_thread_id_t id= os_thread_get_curr_id(); pthread_t id= pthread_self();
if (writer.load(std::memory_order_relaxed) == id) if (writer.load(std::memory_order_relaxed) == id)
{ {
if (for_io) if (for_io)
@ -456,7 +455,7 @@ template<typename ssux> inline bool sux_lock<ssux>::u_lock_try(bool for_io)
template<typename ssux> inline bool sux_lock<ssux>::x_lock_try() template<typename ssux> inline bool sux_lock<ssux>::x_lock_try()
{ {
os_thread_id_t id= os_thread_get_curr_id(); pthread_t id= pthread_self();
if (writer.load(std::memory_order_relaxed) == id) if (writer.load(std::memory_order_relaxed) == id)
{ {
writer_recurse<false>(); writer_recurse<false>();

View file

@ -522,7 +522,7 @@ no longer be associated with a session when the server is restarted.
A session may be served by at most one thread at a time. The serving A session may be served by at most one thread at a time. The serving
thread of a session might change in some MySQL implementations. thread of a session might change in some MySQL implementations.
Therefore we do not have os_thread_get_curr_id() assertions in the code. Therefore we do not have pthread_self() assertions in the code.
Normally, only the thread that is currently associated with a running Normally, only the thread that is currently associated with a running
transaction may access (read and modify) the trx object, and it may do transaction may access (read and modify) the trx object, and it may do
@ -601,7 +601,7 @@ private:
srw_spin_mutex mutex; srw_spin_mutex mutex;
#ifdef UNIV_DEBUG #ifdef UNIV_DEBUG
/** The owner of mutex (0 if none); protected by mutex */ /** The owner of mutex (0 if none); protected by mutex */
std::atomic<os_thread_id_t> mutex_owner{0}; std::atomic<pthread_t> mutex_owner{0};
#endif /* UNIV_DEBUG */ #endif /* UNIV_DEBUG */
public: public:
void mutex_init() { mutex.init(); } void mutex_init() { mutex.init(); }
@ -612,14 +612,14 @@ public:
{ {
ut_ad(!mutex_is_owner()); ut_ad(!mutex_is_owner());
mutex.wr_lock(); mutex.wr_lock();
ut_ad(!mutex_owner.exchange(os_thread_get_curr_id(), ut_ad(!mutex_owner.exchange(pthread_self(),
std::memory_order_relaxed)); std::memory_order_relaxed));
} }
/** Release the mutex */ /** Release the mutex */
void mutex_unlock() void mutex_unlock()
{ {
ut_ad(mutex_owner.exchange(0, std::memory_order_relaxed) ut_ad(mutex_owner.exchange(0, std::memory_order_relaxed)
== os_thread_get_curr_id()); == pthread_self());
mutex.wr_unlock(); mutex.wr_unlock();
} }
#ifndef SUX_LOCK_GENERIC #ifndef SUX_LOCK_GENERIC
@ -630,7 +630,7 @@ public:
bool mutex_is_owner() const bool mutex_is_owner() const
{ {
return mutex_owner.load(std::memory_order_relaxed) == return mutex_owner.load(std::memory_order_relaxed) ==
os_thread_get_curr_id(); pthread_self();
} }
#endif /* UNIV_DEBUG */ #endif /* UNIV_DEBUG */

View file

@ -28,7 +28,7 @@ Created 2012/04/12 by Sunny Bains
#ifndef ut0counter_h #ifndef ut0counter_h
#define ut0counter_h #define ut0counter_h
#include "os0thread.h" #include "univ.i"
#include "my_rdtsc.h" #include "my_rdtsc.h"
/** Use the result of my_timer_cycles(), which mainly uses RDTSC for cycles /** Use the result of my_timer_cycles(), which mainly uses RDTSC for cycles
@ -46,7 +46,7 @@ get_rnd_value()
/* We may go here if my_timer_cycles() returns 0, /* We may go here if my_timer_cycles() returns 0,
so we have to have the plan B for the counter. */ so we have to have the plan B for the counter. */
#if !defined(_WIN32) #if !defined(_WIN32)
return (size_t)os_thread_get_curr_id(); return (size_t)pthread_self();
#else #else
LARGE_INTEGER cnt; LARGE_INTEGER cnt;
QueryPerformanceCounter(&cnt); QueryPerformanceCounter(&cnt);

View file

@ -418,13 +418,13 @@ void lock_sys_t::wr_lock(const char *file, unsigned line)
{ {
mysql_mutex_assert_not_owner(&wait_mutex); mysql_mutex_assert_not_owner(&wait_mutex);
latch.wr_lock(file, line); latch.wr_lock(file, line);
ut_ad(!writer.exchange(os_thread_get_curr_id(), std::memory_order_relaxed)); ut_ad(!writer.exchange(pthread_self(), std::memory_order_relaxed));
} }
/** Release exclusive lock_sys.latch */ /** Release exclusive lock_sys.latch */
void lock_sys_t::wr_unlock() void lock_sys_t::wr_unlock()
{ {
ut_ad(writer.exchange(0, std::memory_order_relaxed) == ut_ad(writer.exchange(0, std::memory_order_relaxed) ==
os_thread_get_curr_id()); pthread_self());
latch.wr_unlock(); latch.wr_unlock();
} }

View file

@ -50,7 +50,6 @@ Created 10/21/1995 Heikki Tuuri
#ifdef HAVE_LINUX_UNISTD_H #ifdef HAVE_LINUX_UNISTD_H
#include "unistd.h" #include "unistd.h"
#endif #endif
#include "os0thread.h"
#include "buf0dblwr.h" #include "buf0dblwr.h"
#include <tpool_structs.h> #include <tpool_structs.h>

View file

@ -1,28 +0,0 @@
/*****************************************************************************
Copyright (c) 1995, 2016, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2017, 2020, MariaDB Corporation.
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 Street, Fifth Floor, Boston, MA 02110-1335 USA
*****************************************************************************/
/**************************************************//**
@file os/os0thread.cc
The interface to the operating system thread control primitives
Created 9/8/1995 Heikki Tuuri
*******************************************************/
#include "univ.i"
#include "srv0srv.h"

View file

@ -485,7 +485,7 @@ priority of the background thread so that it will be scheduled and it
can release the resource. This solution is called priority inheritance can release the resource. This solution is called priority inheritance
in real-time programming. A drawback of this solution is that the overhead in real-time programming. A drawback of this solution is that the overhead
of acquiring a mutex increases slightly, maybe 0.2 microseconds on a 100 of acquiring a mutex increases slightly, maybe 0.2 microseconds on a 100
MHz Pentium, because the thread has to call os_thread_get_curr_id. This may MHz Pentium, because the thread has to call pthread_self. This may
be compared to 0.5 microsecond overhead for a mutex lock-unlock pair. Note be compared to 0.5 microsecond overhead for a mutex lock-unlock pair. Note
that the thread cannot store the information in the resource , say mutex, that the thread cannot store the information in the resource , say mutex,
itself, because competing threads could wipe out the information if it is itself, because competing threads could wipe out the information if it is

View file

@ -55,7 +55,6 @@ Created 2/16/1996 Heikki Tuuri
#include "buf0dblwr.h" #include "buf0dblwr.h"
#include "buf0dump.h" #include "buf0dump.h"
#include "os0file.h" #include "os0file.h"
#include "os0thread.h"
#include "fil0fil.h" #include "fil0fil.h"
#include "fil0crypt.h" #include "fil0crypt.h"
#include "fsp0fsp.h" #include "fsp0fsp.h"

View file

@ -29,7 +29,6 @@ Created 3/26/1996 Heikki Tuuri
#include "fut0fut.h" #include "fut0fut.h"
#include "mach0data.h" #include "mach0data.h"
#include "mtr0log.h" #include "mtr0log.h"
#include "os0thread.h"
#include "que0que.h" #include "que0que.h"
#include "row0purge.h" #include "row0purge.h"
#include "row0upd.h" #include "row0upd.h"
@ -1093,7 +1092,7 @@ trx_purge_fetch_next_rec(
} }
/* fprintf(stderr, "Thread %lu purging trx %llu undo record %llu\n", /* fprintf(stderr, "Thread %lu purging trx %llu undo record %llu\n",
os_thread_get_curr_id(), iter->trx_no, iter->undo_no); */ pthread_self(), iter->trx_no, iter->undo_no); */
*roll_ptr = trx_undo_build_roll_ptr( *roll_ptr = trx_undo_build_roll_ptr(
/* row_purge_record_func() will later set /* row_purge_record_func() will later set

View file

@ -1,7 +1,7 @@
/***************************************************************************** /*****************************************************************************
Copyright (c) 1994, 2017, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 1994, 2017, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2017, 2021, MariaDB Corporation. Copyright (c) 2017, 2022, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it under 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 the terms of the GNU General Public License as published by the Free Software
@ -32,7 +32,6 @@ Created 5/11/1994 Heikki Tuuri
#ifndef UNIV_INNOCHECKSUM #ifndef UNIV_INNOCHECKSUM
#include <mysql_com.h> #include <mysql_com.h>
#include "os0thread.h"
#include "ut0ut.h" #include "ut0ut.h"
#include "trx0trx.h" #include "trx0trx.h"
#include <string> #include <string>
@ -92,7 +91,7 @@ ut_print_timestamp(
#ifdef UNIV_INNOCHECKSUM #ifdef UNIV_INNOCHECKSUM
ulint{0} ulint{0}
#else #else
ulint(os_thread_get_curr_id()) ulint(pthread_self())
#endif #endif
); );
} }