ecore/thread: track "no_queue" threads

these threads are still managed by the main loop, meaning they must be
accounted for so that they can be waited on if necessary during shutdown

this resolves some issues where ecore-con threads would persist after the
main thread had exited or called ecore_shutdown

@fix
fix T7041

Differential Revision: https://phab.enlightenment.org/D6354
This commit is contained in:
Mike Blumenkrantz 2018-06-21 18:38:22 -04:00
parent 14ae3e3dec
commit 1e47db6a71
1 changed files with 11 additions and 3 deletions

View File

@ -460,10 +460,13 @@ _ecore_direct_worker_cleanup(void *data)
DBG("cleanup work=%p, thread=%" PRIu64 " (should join)", work, (uint64_t)work->self);
SLKL(_ecore_pending_job_threads_mutex);
_ecore_thread_count--;
ecore_main_loop_thread_safe_call_async(_ecore_thread_handler, work);
ecore_main_loop_thread_safe_call_async((Ecore_Cb)_ecore_thread_join,
(void *)(intptr_t)PHS());
SLKU(_ecore_pending_job_threads_mutex);
}
static void *
@ -686,7 +689,7 @@ ecore_thread_run(Ecore_Thread_Cb func_blocking,
SLKL(_ecore_pending_job_threads_mutex);
_ecore_pending_job_threads = eina_list_append(_ecore_pending_job_threads, work);
if (_ecore_thread_count == _ecore_thread_count_max)
if (_ecore_thread_count >= _ecore_thread_count_max)
{
SLKU(_ecore_pending_job_threads_mutex);
return (Ecore_Thread *)work;
@ -947,7 +950,12 @@ ecore_thread_feedback_run(Ecore_Thread_Cb func_heavy,
retry_direct:
if (PHC(t, _ecore_direct_worker, worker))
return (Ecore_Thread *)worker;
{
SLKL(_ecore_pending_job_threads_mutex);
_ecore_thread_count++;
SLKU(_ecore_pending_job_threads_mutex);
return (Ecore_Thread *)worker;
}
if (!tried)
{
_ecore_main_call_flush();
@ -969,7 +977,7 @@ retry_direct:
SLKL(_ecore_pending_job_threads_mutex);
_ecore_pending_job_threads_feedback = eina_list_append(_ecore_pending_job_threads_feedback, worker);
if (_ecore_thread_count == _ecore_thread_count_max)
if (_ecore_thread_count >= _ecore_thread_count_max)
{
SLKU(_ecore_pending_job_threads_mutex);
return (Ecore_Thread *)worker;