hi Kistian, I afraid there are two palces need adjusted in rpl_parallel.cc First is in rpl_parallel_thread::get_rgi() adjusted like this ... else { if(!(rgi= new rpl_group_info(rli))) { my_error(ER_OUTOFMEMORY, MYF(0), (int)sizeof(*rgi)); return NULL; } rgi->is_parallel_exec = true; - if ((rgi->deferred_events_collecting= rli->mi->rpl_filter->is_on())) _ rgi->deferred_events= new Deferred_log_events(rli); } + if ((rgi->deferred_events_collecting= rli->mi->rpl_filter->is_on())) + rgi->deferred_events= new Deferred_log_events(rli); because rgi->deferred_events was freed in rpl_parallel_thread::free_rgi() if it wasn't NULL Second is in rpl_parallel_change_thread_count() I think it need add mysql_cond_broadcast(&pool->COND_rpl_thread_pool) after all new threads are ok, this is for the case that skip_slave_start=OFF,then SQL thread would start automaticlly, it could wait forever in rpl_parallel_thread_pool::get_thread(), because SQL thread may reach this function before another thread reach the rpl_parallel_change_thread_count(). 2014-03-04 nanyi607rao