Browse Source

Merge 10.5 into 10.6

bb-10.6-mdev-28739
Marko Mäkelä 2 years ago
parent
commit
d963584d4c
  1. 11
      storage/innobase/buf/buf0buf.cc
  2. 2
      storage/innobase/buf/buf0flu.cc
  3. 5
      storage/innobase/include/buf0buf.h
  4. 5
      tpool/tpool_structs.h

11
storage/innobase/buf/buf0buf.cc

@ -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();
@ -426,7 +426,7 @@ decompress:
return false;
}
slot = buf_pool.io_buf_reserve();
slot = buf_pool.io_buf_reserve(false);
slot->allocate();
decompress_with_slot:
@ -449,7 +449,7 @@ decrypt_failed:
return false;
}
slot = buf_pool.io_buf_reserve();
slot = buf_pool.io_buf_reserve(false);
slot->allocate();
/* decrypt using crypt_buf to dst_frame */
@ -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;

2
storage/innobase/buf/buf0flu.cc

@ -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();

5
storage/innobase/include/buf0buf.h

@ -1884,7 +1884,8 @@ public:
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. */
@ -1916,7 +1917,7 @@ private:
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 */

5
tpool/tpool_structs.h

@ -155,12 +155,11 @@ public:
{
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);
}

Loading…
Cancel
Save