Skip to content
Permalink
Browse files
MDEV-25953 Tpool - prevent potential deadlock in simulated AIO
Do not execute user callback just after pwrite. Instead, submit user
function as task into thread pool. This way, the IO thread would not hog
aiocb, which is a limited (in Innodb) resource
  • Loading branch information
vaintroub committed Jun 17, 2021
1 parent 48938c5 commit 78bd7d8
Showing 1 changed file with 4 additions and 1 deletion.
@@ -159,14 +159,17 @@ class simulated_aio : public aio
#endif
cb->m_ret_len = ret_len;
cb->m_err = err;
cb->m_callback(cb);
cb->m_internal_task.m_func= cb->m_callback;
thread_pool *pool= (thread_pool *)cb->m_internal;
pool->submit_task(&cb->m_internal_task);
}

virtual int submit_io(aiocb *aiocb) override
{
aiocb->m_internal_task.m_func = simulated_aio_callback;
aiocb->m_internal_task.m_arg = aiocb;
aiocb->m_internal_task.m_group = aiocb->m_group;
aiocb->m_internal = m_pool;
m_pool->submit_task(&aiocb->m_internal_task);
return 0;
}

0 comments on commit 78bd7d8

Please sign in to comment.