mirror of
https://github.com/MariaDB/server.git
synced 2025-01-27 09:14:17 +01:00
tpool - implement post-task callback (for Innodb debugging)
This commit is contained in:
parent
90002480e9
commit
bada05a883
6 changed files with 42 additions and 1 deletions
|
@ -714,6 +714,13 @@ static void thread_pool_thread_end()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef DBUG_OFF
|
||||||
|
static void dbug_after_task_callback()
|
||||||
|
{
|
||||||
|
ut_ad(!sync_check_iterate(sync_check()));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void srv_thread_pool_init()
|
void srv_thread_pool_init()
|
||||||
{
|
{
|
||||||
DBUG_ASSERT(!srv_thread_pool);
|
DBUG_ASSERT(!srv_thread_pool);
|
||||||
|
@ -725,6 +732,9 @@ void srv_thread_pool_init()
|
||||||
#endif
|
#endif
|
||||||
srv_thread_pool->set_thread_callbacks(thread_pool_thread_init,
|
srv_thread_pool->set_thread_callbacks(thread_pool_thread_init,
|
||||||
thread_pool_thread_end);
|
thread_pool_thread_end);
|
||||||
|
#ifndef DBUG_OFF
|
||||||
|
tpool::set_after_task_callback(dbug_after_task_callback);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -21,6 +21,21 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 - 1301 USA*/
|
||||||
|
|
||||||
namespace tpool
|
namespace tpool
|
||||||
{
|
{
|
||||||
|
|
||||||
|
#ifndef DBUG_OFF
|
||||||
|
static callback_func_np after_task_callback;
|
||||||
|
void set_after_task_callback(callback_func_np cb)
|
||||||
|
{
|
||||||
|
after_task_callback= cb;
|
||||||
|
}
|
||||||
|
|
||||||
|
void execute_after_task_callback()
|
||||||
|
{
|
||||||
|
if (after_task_callback)
|
||||||
|
after_task_callback();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
task::task(callback_func func, void* arg, task_group* group) :
|
task::task(callback_func func, void* arg, task_group* group) :
|
||||||
m_func(func), m_arg(arg), m_group(group) {}
|
m_func(func), m_arg(arg), m_group(group) {}
|
||||||
|
|
||||||
|
@ -35,6 +50,7 @@ namespace tpool
|
||||||
{
|
{
|
||||||
/* Execute directly. */
|
/* Execute directly. */
|
||||||
m_func(m_arg);
|
m_func(m_arg);
|
||||||
|
dbug_execute_after_task_callback();
|
||||||
release();
|
release();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -53,6 +53,7 @@ namespace tpool
|
||||||
if (t)
|
if (t)
|
||||||
{
|
{
|
||||||
t->m_func(t->m_arg);
|
t->m_func(t->m_arg);
|
||||||
|
dbug_execute_after_task_callback();
|
||||||
t->release();
|
t->release();
|
||||||
}
|
}
|
||||||
lk.lock();
|
lk.lock();
|
||||||
|
|
|
@ -51,6 +51,7 @@ namespace tpool
|
||||||
Task callback function
|
Task callback function
|
||||||
*/
|
*/
|
||||||
typedef void (*callback_func)(void *);
|
typedef void (*callback_func)(void *);
|
||||||
|
typedef void (*callback_func_np)(void);
|
||||||
class task;
|
class task;
|
||||||
|
|
||||||
/** A class that can be used e.g. for
|
/** A class that can be used e.g. for
|
||||||
|
@ -174,6 +175,18 @@ class thread_pool;
|
||||||
|
|
||||||
extern aio *create_simulated_aio(thread_pool *tp);
|
extern aio *create_simulated_aio(thread_pool *tp);
|
||||||
|
|
||||||
|
#ifndef DBUG_OFF
|
||||||
|
/*
|
||||||
|
This function is useful for debugging to make sure all mutexes are released
|
||||||
|
inside a task callback
|
||||||
|
*/
|
||||||
|
void set_after_task_callback(callback_func_np cb);
|
||||||
|
void execute_after_task_callback();
|
||||||
|
#define dbug_execute_after_task_callback() execute_after_task_callback()
|
||||||
|
#else
|
||||||
|
#define dbug_execute_after_task_callback() do{}while(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
class thread_pool
|
class thread_pool
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
|
|
|
@ -293,7 +293,7 @@ public:
|
||||||
return;
|
return;
|
||||||
|
|
||||||
m_callback(m_data);
|
m_callback(m_data);
|
||||||
|
dbug_execute_after_task_callback();
|
||||||
m_running = false;
|
m_running = false;
|
||||||
|
|
||||||
if (m_pool && m_period)
|
if (m_pool && m_period)
|
||||||
|
|
|
@ -93,6 +93,7 @@ class thread_pool_win : public thread_pool
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
timer->m_func(timer->m_data);
|
timer->m_func(timer->m_data);
|
||||||
|
dbug_execute_after_task_callback();
|
||||||
if (timer->m_period)
|
if (timer->m_period)
|
||||||
timer->set_time(timer->m_period, timer->m_period);
|
timer->set_time(timer->m_period, timer->m_period);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue