Skip to content

Commit

Permalink
Merge 10.5 into 10.6
Browse files Browse the repository at this point in the history
  • Loading branch information
dr-m committed Nov 22, 2023
2 parents 4c16ec3 + 78c9a12 commit d963584
Show file tree
Hide file tree
Showing 4 changed files with 13 additions and 10 deletions.
11 changes: 7 additions & 4 deletions storage/innobase/buf/buf0buf.cc
Original file line number Diff line number Diff line change
Expand Up @@ -404,7 +404,7 @@ static bool buf_page_decrypt_after_read(buf_page_t *bpage,

if (id.space() == SRV_TMP_SPACE_ID
&& innodb_encrypt_temporary_tables) {
slot = buf_pool.io_buf_reserve();
slot = buf_pool.io_buf_reserve(false);
slot->allocate();
bool ok = buf_tmp_page_decrypt(slot->crypt_buf, dst_frame);
slot->release();
Expand All @@ -426,7 +426,7 @@ static bool buf_page_decrypt_after_read(buf_page_t *bpage,
return false;
}

slot = buf_pool.io_buf_reserve();
slot = buf_pool.io_buf_reserve(false);
slot->allocate();

decompress_with_slot:
Expand All @@ -449,7 +449,7 @@ static bool buf_page_decrypt_after_read(buf_page_t *bpage,
return false;
}

slot = buf_pool.io_buf_reserve();
slot = buf_pool.io_buf_reserve(false);
slot->allocate();

/* decrypt using crypt_buf to dst_frame */
Expand Down Expand Up @@ -1307,14 +1307,17 @@ void buf_pool_t::io_buf_t::close()
n_slots= 0;
}

buf_tmp_buffer_t *buf_pool_t::io_buf_t::reserve()
buf_tmp_buffer_t *buf_pool_t::io_buf_t::reserve(bool wait_for_reads)
{
for (;;)
{
for (buf_tmp_buffer_t *s= slots, *e= slots + n_slots; s != e; s++)
if (s->acquire())
return s;
buf_dblwr.flush_buffered_writes();
os_aio_wait_until_no_pending_writes(true);
if (!wait_for_reads)
continue;
for (buf_tmp_buffer_t *s= slots, *e= slots + n_slots; s != e; s++)
if (s->acquire())
return s;
Expand Down
2 changes: 1 addition & 1 deletion storage/innobase/buf/buf0flu.cc
Original file line number Diff line number Diff line change
Expand Up @@ -693,7 +693,7 @@ static byte *buf_page_encrypt(fil_space_t* space, buf_page_t* bpage, byte* s,

ut_ad(!bpage->zip_size() || !page_compressed);
/* Find free slot from temporary memory array */
*slot= buf_pool.io_buf_reserve();
*slot= buf_pool.io_buf_reserve(true);
ut_a(*slot);
(*slot)->allocate();

Expand Down
5 changes: 3 additions & 2 deletions storage/innobase/include/buf0buf.h
Original file line number Diff line number Diff line change
Expand Up @@ -1884,7 +1884,8 @@ class buf_pool_t
a delete-buffering operation is pending. Protected by mutex. */
buf_page_t watch[innodb_purge_threads_MAX + 1];
/** Reserve a buffer. */
buf_tmp_buffer_t *io_buf_reserve() { return io_buf.reserve(); }
buf_tmp_buffer_t *io_buf_reserve(bool wait_for_reads)
{ return io_buf.reserve(wait_for_reads); }

private:
/** Remove a block from the flush list. */
Expand Down Expand Up @@ -1916,7 +1917,7 @@ class buf_pool_t
void close();

/** Reserve a buffer */
buf_tmp_buffer_t *reserve();
buf_tmp_buffer_t *reserve(bool wait_for_reads);
} io_buf;

/** whether resize() is in the critical path */
Expand Down
5 changes: 2 additions & 3 deletions tpool/tpool_structs.h
Original file line number Diff line number Diff line change
Expand Up @@ -155,12 +155,11 @@ template<typename T> class cache
{
mysql_mutex_lock(&m_mtx);
assert(!is_full());
const bool was_empty= is_empty();
// put element to the logical end of the array
m_cache[--m_pos] = ele;

/* Notify waiters when the cache becomes
not empty, or when it becomes full */
if (m_pos == 1 || (m_waiters && is_full()))
if (was_empty || (is_full() && m_waiters))
pthread_cond_broadcast(&m_cv);
mysql_mutex_unlock(&m_mtx);
}
Expand Down

0 comments on commit d963584

Please sign in to comment.