mirror of
https://github.com/MariaDB/server.git
synced 2025-01-29 02:05:57 +01:00
MDEV-34973: innobase/dict0dict: add noexcept
to lock/unlock methods
Another chance for cutting back overhead due to C++ exceptions being enabled; the `dict_sys_t` class is a good candidate because its locking methods are called frequently. Binary size reduction this time: text data bss dec hex filename 24448622 2436488 9473537 36358647 22ac9f7 build/release/sql/mariadbd 24448474 2436488 9473601 36358563 22ac9a3 build/release/sql/mariadbd
This commit is contained in:
parent
813123e3e0
commit
6715e4dfe1
2 changed files with 16 additions and 16 deletions
|
@ -955,7 +955,7 @@ void dict_sys_t::create()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void dict_sys_t::lock_wait(SRW_LOCK_ARGS(const char *file, unsigned line))
|
void dict_sys_t::lock_wait(SRW_LOCK_ARGS(const char *file, unsigned line)) noexcept
|
||||||
{
|
{
|
||||||
ulonglong now= my_hrtime_coarse().val, old= 0;
|
ulonglong now= my_hrtime_coarse().val, old= 0;
|
||||||
if (latch_ex_wait_start.compare_exchange_strong
|
if (latch_ex_wait_start.compare_exchange_strong
|
||||||
|
@ -981,17 +981,17 @@ void dict_sys_t::lock_wait(SRW_LOCK_ARGS(const char *file, unsigned line))
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef UNIV_PFS_RWLOCK
|
#ifdef UNIV_PFS_RWLOCK
|
||||||
ATTRIBUTE_NOINLINE void dict_sys_t::unlock()
|
ATTRIBUTE_NOINLINE void dict_sys_t::unlock() noexcept
|
||||||
{
|
{
|
||||||
latch.wr_unlock();
|
latch.wr_unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
ATTRIBUTE_NOINLINE void dict_sys_t::freeze(const char *file, unsigned line)
|
ATTRIBUTE_NOINLINE void dict_sys_t::freeze(const char *file, unsigned line) noexcept
|
||||||
{
|
{
|
||||||
latch.rd_lock(file, line);
|
latch.rd_lock(file, line);
|
||||||
}
|
}
|
||||||
|
|
||||||
ATTRIBUTE_NOINLINE void dict_sys_t::unfreeze()
|
ATTRIBUTE_NOINLINE void dict_sys_t::unfreeze() noexcept
|
||||||
{
|
{
|
||||||
latch.rd_unlock();
|
latch.rd_unlock();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1493,24 +1493,24 @@ public:
|
||||||
|
|
||||||
#ifdef UNIV_DEBUG
|
#ifdef UNIV_DEBUG
|
||||||
/** @return whether the current thread is holding the latch */
|
/** @return whether the current thread is holding the latch */
|
||||||
bool frozen() const { return latch.have_any(); }
|
bool frozen() const noexcept { return latch.have_any(); }
|
||||||
/** @return whether the current thread is holding a shared latch */
|
/** @return whether the current thread is holding a shared latch */
|
||||||
bool frozen_not_locked() const { return latch.have_rd(); }
|
bool frozen_not_locked() const noexcept { return latch.have_rd(); }
|
||||||
/** @return whether the current thread holds the exclusive latch */
|
/** @return whether the current thread holds the exclusive latch */
|
||||||
bool locked() const { return latch.have_wr(); }
|
bool locked() const noexcept { return latch.have_wr(); }
|
||||||
#endif
|
#endif
|
||||||
private:
|
private:
|
||||||
/** Acquire the exclusive latch */
|
/** Acquire the exclusive latch */
|
||||||
ATTRIBUTE_NOINLINE
|
ATTRIBUTE_NOINLINE
|
||||||
void lock_wait(SRW_LOCK_ARGS(const char *file, unsigned line));
|
void lock_wait(SRW_LOCK_ARGS(const char *file, unsigned line)) noexcept;
|
||||||
public:
|
public:
|
||||||
/** @return the my_hrtime_coarse().val of the oldest lock_wait() start,
|
/** @return the my_hrtime_coarse().val of the oldest lock_wait() start,
|
||||||
assuming that requests are served on a FIFO basis */
|
assuming that requests are served on a FIFO basis */
|
||||||
ulonglong oldest_wait() const
|
ulonglong oldest_wait() const noexcept
|
||||||
{ return latch_ex_wait_start.load(std::memory_order_relaxed); }
|
{ return latch_ex_wait_start.load(std::memory_order_relaxed); }
|
||||||
|
|
||||||
/** Exclusively lock the dictionary cache. */
|
/** Exclusively lock the dictionary cache. */
|
||||||
void lock(SRW_LOCK_ARGS(const char *file, unsigned line))
|
void lock(SRW_LOCK_ARGS(const char *file, unsigned line)) noexcept
|
||||||
{
|
{
|
||||||
if (!latch.wr_lock_try())
|
if (!latch.wr_lock_try())
|
||||||
lock_wait(SRW_LOCK_ARGS(file, line));
|
lock_wait(SRW_LOCK_ARGS(file, line));
|
||||||
|
@ -1518,18 +1518,18 @@ public:
|
||||||
|
|
||||||
#ifdef UNIV_PFS_RWLOCK
|
#ifdef UNIV_PFS_RWLOCK
|
||||||
/** Unlock the data dictionary cache. */
|
/** Unlock the data dictionary cache. */
|
||||||
ATTRIBUTE_NOINLINE void unlock();
|
ATTRIBUTE_NOINLINE void unlock() noexcept;
|
||||||
/** Acquire a shared lock on the dictionary cache. */
|
/** Acquire a shared lock on the dictionary cache. */
|
||||||
ATTRIBUTE_NOINLINE void freeze(const char *file, unsigned line);
|
ATTRIBUTE_NOINLINE void freeze(const char *file, unsigned line) noexcept;
|
||||||
/** Release a shared lock on the dictionary cache. */
|
/** Release a shared lock on the dictionary cache. */
|
||||||
ATTRIBUTE_NOINLINE void unfreeze();
|
ATTRIBUTE_NOINLINE void unfreeze() noexcept;
|
||||||
#else
|
#else
|
||||||
/** Unlock the data dictionary cache. */
|
/** Unlock the data dictionary cache. */
|
||||||
void unlock() { latch.wr_unlock(); }
|
void unlock() noexcept { latch.wr_unlock(); }
|
||||||
/** Acquire a shared lock on the dictionary cache. */
|
/** Acquire a shared lock on the dictionary cache. */
|
||||||
void freeze() { latch.rd_lock(); }
|
void freeze() noexcept { latch.rd_lock(); }
|
||||||
/** Release a shared lock on the dictionary cache. */
|
/** Release a shared lock on the dictionary cache. */
|
||||||
void unfreeze() { latch.rd_unlock(); }
|
void unfreeze() noexcept { latch.rd_unlock(); }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/** Estimate the used memory occupied by the data dictionary
|
/** Estimate the used memory occupied by the data dictionary
|
||||||
|
|
Loading…
Add table
Reference in a new issue