* ecore: break Ecore_Thread API once and for all to make it consistent.

SVN revision: 54502
This commit is contained in:
Cedric BAIL 2010-11-12 13:28:19 +00:00
parent 0bc55e69b2
commit e61f8560ea
6 changed files with 90 additions and 87 deletions

View File

@ -205,15 +205,15 @@ extern "C" {
*/
typedef Eina_Bool (*Ecore_Event_Handler_Cb) (void *data, int type, void *event);
/**
* @typedef Ecore_Thread_Heavy_Cb Ecore_Thread_Heavy_Cb
* A callback used to run cpu intensive or blocking I/O operations.
* @typedef Ecore_Thread_Cb Ecore_Thread_Cb
* A callback used by Ecore_Thread helper.
*/
typedef void (*Ecore_Thread_Heavy_Cb) (Ecore_Thread *thread, void *data);
typedef void (*Ecore_Thread_Cb) (void *data, Ecore_Thread *thread);
/**
* @typedef Ecore_Thread_Notify_Cb Ecore_Thread_Notify_Cb
* A callback used by the main loop to receive data sent by an @ref Ecore_Thread_Group.
*/
typedef void (*Ecore_Thread_Notify_Cb) (Ecore_Thread *thread, void *msg_data, void *data);
typedef void (*Ecore_Thread_Notify_Cb) (void *data, Ecore_Thread *thread, void *msg_data);
/**
* @typedef Ecore_Task_Cb Ecore_Task_Cb
* A callback run for a task (timer, idler, poller, animater, etc)
@ -482,14 +482,14 @@ extern "C" {
* @{
*/
EAPI Ecore_Thread *ecore_thread_run(Ecore_Thread_Heavy_Cb func_blocking,
Ecore_Cb func_end,
Ecore_Cb func_cancel,
EAPI Ecore_Thread *ecore_thread_run(Ecore_Thread_Cb func_blocking,
Ecore_Thread_Cb func_end,
Ecore_Thread_Cb func_cancel,
const void *data);
EAPI Ecore_Thread *ecore_thread_feedback_run(Ecore_Thread_Heavy_Cb func_heavy,
EAPI Ecore_Thread *ecore_thread_feedback_run(Ecore_Thread_Cb func_heavy,
Ecore_Thread_Notify_Cb func_notify,
Ecore_Cb func_end,
Ecore_Cb func_cancel,
Ecore_Thread_Cb func_end,
Ecore_Thread_Cb func_cancel,
const void *data,
Eina_Bool try_no_queue);
EAPI Eina_Bool ecore_thread_cancel(Ecore_Thread *thread);

View File

@ -35,10 +35,10 @@ struct _Ecore_Pthread_Worker
{
union {
struct {
Ecore_Thread_Heavy_Cb func_blocking;
Ecore_Thread_Cb func_blocking;
} short_run;
struct {
Ecore_Thread_Heavy_Cb func_heavy;
Ecore_Thread_Cb func_heavy;
Ecore_Thread_Notify_Cb func_notify;
Ecore_Pipe *notify;
@ -47,8 +47,8 @@ struct _Ecore_Pthread_Worker
} feedback_run;
} u;
Ecore_Cb func_cancel;
Ecore_Cb func_end;
Ecore_Thread_Cb func_cancel;
Ecore_Thread_Cb func_end;
#ifdef EFL_HAVE_PTHREAD
pthread_t self;
Eina_Hash *hash;
@ -119,7 +119,7 @@ _ecore_thread_pipe_del(void *data __UNUSED__, int type __UNUSED__, void *event _
}
static void
_ecore_thread_end(Ecore_Pthread_Data *pth)
_ecore_thread_end(Ecore_Pthread_Data *pth, __UNUSED__ Ecore_Thread *work)
{
Ecore_Pipe *p;
@ -138,12 +138,12 @@ _ecore_thread_kill(Ecore_Pthread_Worker *work)
if (work->cancel)
{
if (work->func_cancel)
work->func_cancel((void *) work->data);
work->func_cancel((void *) work->data, (Ecore_Thread *) work);
}
else
{
if (work->func_end)
work->func_end((void *) work->data);
work->func_end((void *) work->data, (Ecore_Thread *) work);
}
if (work->feedback_run)
@ -188,7 +188,7 @@ _ecore_notify_handler(void *data, void *buffer, unsigned int nbyte)
work->u.feedback_run.received++;
if (work->u.feedback_run.func_notify)
work->u.feedback_run.func_notify((Ecore_Thread *) work, user_data, (void *) work->data);
work->u.feedback_run.func_notify((void *) work->data, (Ecore_Thread *) work, user_data);
/* Force reading all notify event before killing the thread */
if (work->kill && work->u.feedback_run.send == work->u.feedback_run.received)
@ -219,7 +219,7 @@ _ecore_short_job(Ecore_Pipe *end_pipe)
pthread_mutex_unlock(&_ecore_pending_job_threads_mutex);
if (!work->cancel)
work->u.short_run.func_blocking((Ecore_Thread*) work, (void *) work->data);
work->u.short_run.func_blocking((void *) work->data, (Ecore_Thread*) work);
ecore_pipe_write(end_pipe, &work, sizeof (Ecore_Pthread_Worker *));
}
@ -248,7 +248,7 @@ _ecore_feedback_job(Ecore_Pipe *end_pipe, pthread_t thread)
work->self = thread;
if (!work->cancel)
work->u.feedback_run.func_heavy((Ecore_Thread *) work, (void *) work->data);
work->u.feedback_run.func_heavy((void *) work->data, (Ecore_Thread *) work);
ecore_pipe_write(end_pipe, &work, sizeof (Ecore_Pthread_Worker *));
}
@ -275,7 +275,7 @@ _ecore_direct_worker(Ecore_Pthread_Worker *work)
pth->thread = pthread_self();
work->self = pth->thread;
work->u.feedback_run.func_heavy((Ecore_Thread *) work, (void *) work->data);
work->u.feedback_run.func_heavy((void *) work->data, (Ecore_Thread *) work);
ecore_pipe_write(pth->p, &work, sizeof (Ecore_Pthread_Worker *));
@ -401,14 +401,14 @@ _ecore_thread_shutdown(void)
EINA_LIST_FREE(_ecore_pending_job_threads, work)
{
if (work->func_cancel)
work->func_cancel((void *)work->data);
work->func_cancel((void *)work->data, (Ecore_Thread *) work);
free(work);
}
EINA_LIST_FREE(_ecore_pending_job_threads_feedback, work)
{
if (work->func_cancel)
work->func_cancel((void *)work->data);
work->func_cancel((void *)work->data, (Ecore_Thread *) work);
free(work);
}
@ -466,9 +466,9 @@ _ecore_thread_shutdown(void)
* host CPU can handle.
*/
EAPI Ecore_Thread *
ecore_thread_run(Ecore_Thread_Heavy_Cb func_blocking,
Ecore_Cb func_end,
Ecore_Cb func_cancel,
ecore_thread_run(Ecore_Thread_Cb func_blocking,
Ecore_Thread_Cb func_end,
Ecore_Thread_Cb func_cancel,
const void *data)
{
Ecore_Pthread_Worker *work;
@ -482,7 +482,7 @@ ecore_thread_run(Ecore_Thread_Heavy_Cb func_blocking,
if (!work)
{
if (func_cancel)
func_cancel((void *) data);
func_cancel((void *) data, NULL);
return NULL;
}
@ -539,7 +539,7 @@ ecore_thread_run(Ecore_Thread_Heavy_Cb func_blocking,
pthread_mutex_unlock(&_ecore_pending_job_threads_mutex);
if (work->func_cancel)
work->func_cancel((void *) work->data);
work->func_cancel((void *) work->data, (Ecore_Thread *) work);
free(work);
work = NULL;
}
@ -549,8 +549,11 @@ ecore_thread_run(Ecore_Thread_Heavy_Cb func_blocking,
If no thread and as we don't want to break app that rely on this
facility, we will lock the interface until we are done.
*/
func_blocking((Ecore_Thread *) work, (void *)data);
func_end((void *)data);
func_blocking((void *)data, (Ecore_Thread *) work);
if (work->cancel == EINA_FALSE) func_end((void *)data, (Ecore_Thread *) work);
else func_end((void *)data, (Ecore_Thread *) work);
free(work);
return NULL;
#endif
@ -608,7 +611,7 @@ ecore_thread_cancel(Ecore_Thread *thread)
pthread_mutex_unlock(&_ecore_pending_job_threads_mutex);
if (work->func_cancel)
work->func_cancel((void *) work->data);
work->func_cancel((void *) work->data, (Ecore_Thread *) work);
free(work);
return EINA_TRUE;
@ -624,7 +627,7 @@ ecore_thread_cancel(Ecore_Thread *thread)
pthread_mutex_unlock(&_ecore_pending_job_threads_mutex);
if (work->func_cancel)
work->func_cancel((void *) work->data);
work->func_cancel((void *) work->data, (Ecore_Thread *) work);
free(work);
return EINA_TRUE;
@ -688,10 +691,10 @@ ecore_thread_check(Ecore_Thread *thread)
* the CPU down, so be careful with that. Of course if it can't start a new thread, it will
* try to use one from the pool.
*/
EAPI Ecore_Thread *ecore_thread_feedback_run(Ecore_Thread_Heavy_Cb func_heavy,
EAPI Ecore_Thread *ecore_thread_feedback_run(Ecore_Thread_Cb func_heavy,
Ecore_Thread_Notify_Cb func_notify,
Ecore_Cb func_end,
Ecore_Cb func_cancel,
Ecore_Thread_Cb func_end,
Ecore_Thread_Cb func_cancel,
const void *data,
Eina_Bool try_no_queue)
{
@ -768,7 +771,7 @@ EAPI Ecore_Thread *ecore_thread_feedback_run(Ecore_Thread_Heavy_Cb func_heavy,
worker);
pthread_mutex_unlock(&_ecore_pending_job_threads_mutex);
if (func_cancel) func_cancel((void *) data);
if (func_cancel) func_cancel((void *) data, NULL);
if (worker)
{
@ -800,10 +803,10 @@ EAPI Ecore_Thread *ecore_thread_feedback_run(Ecore_Thread_Heavy_Cb func_heavy,
worker.feedback_run = EINA_TRUE;
worker.kill = EINA_FALSE;
func_heavy((Ecore_Thread *) &worker, (void *)data);
func_heavy((void *)data, (Ecore_Thread *) &worker);
if (worker.func_cancel) func_cancel((void *)data);
else func_end((void *)data);
if (worker.cancel) func_cancel((void *)data, (Ecore_Thread *) &worker);
else func_end((void *)data, (Ecore_Thread *) &worker);
return NULL;
#endif
@ -837,7 +840,7 @@ ecore_thread_feedback(Ecore_Thread *thread, const void *data)
return EINA_TRUE;
#else
worker->u.feedback_run.func_notify(thread, (void*) data, (void*) worker->data);
worker->u.feedback_run.func_notify((void*) worker->data, thread, (void*) data);
return EINA_TRUE;
#endif

View File

@ -389,7 +389,7 @@ _eio_dir_chmod(Ecore_Thread *thread, Eio_Dir_Copy *order,
}
static void
_eio_dir_copy_heavy(Ecore_Thread *thread, void *data)
_eio_dir_copy_heavy(void *data, Ecore_Thread *thread)
{
Eio_Dir_Copy *copy = data;
const char *file = NULL;
@ -475,7 +475,7 @@ _eio_dir_copy_heavy(Ecore_Thread *thread, void *data)
}
static void
_eio_dir_copy_notify(Ecore_Thread *thread __UNUSED__, void *msg_data, void *data)
_eio_dir_copy_notify(void *data, Ecore_Thread *thread __UNUSED__, void *msg_data)
{
Eio_Dir_Copy *copy = data;
Eio_Progress *progress = msg_data;
@ -492,7 +492,7 @@ _eio_dir_copy_free(Eio_Dir_Copy *copy)
}
static void
_eio_dir_copy_end(void *data)
_eio_dir_copy_end(void *data, Ecore_Thread *thread __UNUSED__)
{
Eio_Dir_Copy *copy = data;
@ -502,7 +502,7 @@ _eio_dir_copy_end(void *data)
}
static void
_eio_dir_copy_error(void *data)
_eio_dir_copy_error(void *data, Ecore_Thread *thread __UNUSED__)
{
Eio_Dir_Copy *copy = data;
@ -512,7 +512,7 @@ _eio_dir_copy_error(void *data)
}
static void
_eio_dir_move_heavy(Ecore_Thread *thread, void *data)
_eio_dir_move_heavy(void *data, Ecore_Thread *thread)
{
Eio_Dir_Copy *move = data;
const char *file = NULL;
@ -622,7 +622,7 @@ _eio_dir_move_heavy(Ecore_Thread *thread, void *data)
}
static void
_eio_dir_rmrf_heavy(Ecore_Thread *thread, void *data)
_eio_dir_rmrf_heavy(void *data, Ecore_Thread *thread)
{
Eio_Dir_Copy *rmrf = data;
const char *file = NULL;

View File

@ -114,7 +114,7 @@
*/
static void
_eio_file_heavy(Ecore_Thread *thread, void *data)
_eio_file_heavy(void *data, Ecore_Thread *thread)
{
Eio_File_Char_Ls *async = data;
Eina_Iterator *ls;
@ -147,7 +147,7 @@ _eio_file_heavy(Ecore_Thread *thread, void *data)
}
static void
_eio_file_notify(Ecore_Thread *thread __UNUSED__, void *msg_data, void *data)
_eio_file_notify(void *data, Ecore_Thread *thread __UNUSED__, void *msg_data)
{
Eio_File_Char_Ls *async = data;
const char *file = msg_data;
@ -197,7 +197,7 @@ _eio_file_eina_ls_heavy(Ecore_Thread *thread, Eio_File_Direct_Ls *async, Eina_It
}
static void
_eio_file_direct_heavy(Ecore_Thread *thread, void *data)
_eio_file_direct_heavy(void *data, Ecore_Thread *thread)
{
Eio_File_Direct_Ls *async = data;
Eina_Iterator *ls;
@ -208,7 +208,7 @@ _eio_file_direct_heavy(Ecore_Thread *thread, void *data)
}
static void
_eio_file_stat_heavy(Ecore_Thread *thread, void *data)
_eio_file_stat_heavy(void *data, Ecore_Thread *thread)
{
Eio_File_Direct_Ls *async = data;
Eina_Iterator *ls;
@ -219,7 +219,7 @@ _eio_file_stat_heavy(Ecore_Thread *thread, void *data)
}
static void
_eio_file_direct_notify(Ecore_Thread *thread __UNUSED__, void *msg_data, void *data)
_eio_file_direct_notify(void *data, Ecore_Thread *thread __UNUSED__, void *msg_data)
{
Eio_File_Direct_Ls *async = data;
Eina_File_Direct_Info *info = msg_data;
@ -230,7 +230,7 @@ _eio_file_direct_notify(Ecore_Thread *thread __UNUSED__, void *msg_data, void *d
}
static void
_eio_file_end(void *data)
_eio_file_end(void *data, Ecore_Thread *thread __UNUSED__)
{
Eio_File_Ls *async = data;
@ -241,7 +241,7 @@ _eio_file_end(void *data)
}
static void
_eio_file_error(void *data)
_eio_file_error(void *data, Ecore_Thread *thread __UNUSED__)
{
Eio_File_Ls *async = data;
@ -356,7 +356,7 @@ _eio_file_copy_splice(Ecore_Thread *thread, Eio_File_Progress *op, int in, int o
#endif
static void
_eio_file_copy_heavy(Ecore_Thread *thread, void *data)
_eio_file_copy_heavy(void *data, Ecore_Thread *thread)
{
Eio_File_Progress *copy = data;
@ -364,7 +364,7 @@ _eio_file_copy_heavy(Ecore_Thread *thread, void *data)
}
static void
_eio_file_copy_notify(Ecore_Thread *thread __UNUSED__, void *msg_data, void *data)
_eio_file_copy_notify(void *data, Ecore_Thread *thread __UNUSED__, void *msg_data)
{
Eio_File_Progress *copy = data;
@ -380,7 +380,7 @@ _eio_file_copy_free(Eio_File_Progress *copy)
}
static void
_eio_file_copy_end(void *data)
_eio_file_copy_end(void *data, Ecore_Thread *thread __UNUSED__)
{
Eio_File_Progress *copy = data;
@ -390,7 +390,7 @@ _eio_file_copy_end(void *data)
}
static void
_eio_file_copy_error(void *data)
_eio_file_copy_error(void *data, Ecore_Thread *thread __UNUSED__)
{
Eio_File_Progress *copy = data;
@ -463,7 +463,7 @@ _eio_file_move_copy_error(void *data, int error)
}
static void
_eio_file_move_heavy(Ecore_Thread *thread, void *data)
_eio_file_move_heavy(void *data, Ecore_Thread *thread)
{
Eio_File_Move *move = data;
@ -474,7 +474,7 @@ _eio_file_move_heavy(Ecore_Thread *thread, void *data)
}
static void
_eio_file_move_notify(Ecore_Thread *thread __UNUSED__, void *msg_data, void *data)
_eio_file_move_notify(void *data, Ecore_Thread *thread __UNUSED__, void *msg_data)
{
Eio_File_Move *move = data;
@ -482,7 +482,7 @@ _eio_file_move_notify(Ecore_Thread *thread __UNUSED__, void *msg_data, void *dat
}
static void
_eio_file_move_end(void *data)
_eio_file_move_end(void *data, Ecore_Thread *thread __UNUSED__)
{
Eio_File_Move *move = data;
@ -492,7 +492,7 @@ _eio_file_move_end(void *data)
}
static void
_eio_file_move_error(void *data)
_eio_file_move_error(void *data, Ecore_Thread *thread __UNUSED__)
{
Eio_File_Move *move = data;

View File

@ -166,19 +166,19 @@ Eina_Bool eio_file_set(Eio_File *common,
Eio_Done_Cb done_cb,
Eio_Error_Cb error_cb,
const void *data,
Ecore_Thread_Heavy_Cb job_cb,
Ecore_Cb end_cb,
Ecore_Cb cancel_cb);
Ecore_Thread_Cb job_cb,
Ecore_Thread_Cb end_cb,
Ecore_Thread_Cb cancel_cb);
/* Be aware that ecore_thread_run could call cancel_cb if something goes wrong. */
Eina_Bool eio_long_file_set(Eio_File *common,
Eio_Done_Cb done_cb,
Eio_Error_Cb error_cb,
const void *data,
Ecore_Thread_Heavy_Cb heavy_cb,
Ecore_Thread_Cb heavy_cb,
Ecore_Thread_Notify_Cb notify_cb,
Ecore_Cb end_cb,
Ecore_Cb cancel_cb);
Ecore_Thread_Cb end_cb,
Ecore_Thread_Cb cancel_cb);
void eio_file_error(Eio_File *common);
void eio_file_thread_error(Eio_File *common, Ecore_Thread *thread);

View File

@ -30,7 +30,7 @@
*/
static void
_eio_file_mkdir(Ecore_Thread *thread, void *data)
_eio_file_mkdir(void *data, Ecore_Thread *thread)
{
Eio_File_Mkdir *m = data;
@ -46,7 +46,7 @@ _eio_mkdir_free(Eio_File_Mkdir *m)
}
static void
_eio_file_mkdir_done(void *data)
_eio_file_mkdir_done(void *data, Ecore_Thread *thread __UNUSED__)
{
Eio_File_Mkdir *m = data;
@ -57,7 +57,7 @@ _eio_file_mkdir_done(void *data)
}
static void
_eio_file_mkdir_error(void *data)
_eio_file_mkdir_error(void *data, Ecore_Thread *thread __UNUSED__)
{
Eio_File_Mkdir *m = data;
@ -66,7 +66,7 @@ _eio_file_mkdir_error(void *data)
}
static void
_eio_file_unlink(Ecore_Thread *thread, void *data)
_eio_file_unlink(void *data, Ecore_Thread *thread)
{
Eio_File_Unlink *l = data;
@ -82,7 +82,7 @@ _eio_unlink_free(Eio_File_Unlink *l)
}
static void
_eio_file_unlink_done(void *data)
_eio_file_unlink_done(void *data, Ecore_Thread *thread __UNUSED__)
{
Eio_File_Unlink *l = data;
@ -93,7 +93,7 @@ _eio_file_unlink_done(void *data)
}
static void
_eio_file_unlink_error(void *data)
_eio_file_unlink_error(void *data, Ecore_Thread *thread __UNUSED__)
{
Eio_File_Unlink *l = data;
@ -102,7 +102,7 @@ _eio_file_unlink_error(void *data)
}
static void
_eio_file_stat(Ecore_Thread *thread, void *data)
_eio_file_stat(void *data, Ecore_Thread *thread)
{
Eio_File_Stat *s = data;
@ -118,7 +118,7 @@ _eio_stat_free(Eio_File_Stat *s)
}
static void
_eio_file_stat_done(void *data)
_eio_file_stat_done(void *data, Ecore_Thread *thread __UNUSED__)
{
Eio_File_Stat *s = data;
@ -129,7 +129,7 @@ _eio_file_stat_done(void *data)
}
static void
_eio_file_stat_error(void *data)
_eio_file_stat_error(void *data, Ecore_Thread *thread __UNUSED__)
{
Eio_File_Stat *s = data;
@ -138,7 +138,7 @@ _eio_file_stat_error(void *data)
}
static void
_eio_file_chmod(Ecore_Thread *thread, void *data)
_eio_file_chmod(void *data, Ecore_Thread *thread)
{
Eio_File_Chmod *ch = data;
@ -147,7 +147,7 @@ _eio_file_chmod(Ecore_Thread *thread, void *data)
}
static void
_eio_file_chown(Ecore_Thread *thread, void *data)
_eio_file_chown(void *data, Ecore_Thread *thread)
{
Eio_File_Chown *own = data;
char *tmp;
@ -213,7 +213,7 @@ _eio_chown_free(Eio_File_Chown *ch)
}
static void
_eio_file_chown_done(void *data)
_eio_file_chown_done(void *data, Ecore_Thread *thread __UNUSED__)
{
Eio_File_Chown *ch = data;
@ -224,7 +224,7 @@ _eio_file_chown_done(void *data)
}
static void
_eio_file_chown_error(void *data)
_eio_file_chown_error(void *data, Ecore_Thread *thread __UNUSED__)
{
Eio_File_Chown *ch = data;
@ -263,10 +263,10 @@ eio_long_file_set(Eio_File *common,
Eio_Done_Cb done_cb,
Eio_Error_Cb error_cb,
const void *data,
Ecore_Thread_Heavy_Cb heavy_cb,
Ecore_Thread_Cb heavy_cb,
Ecore_Thread_Notify_Cb notify_cb,
Ecore_Cb end_cb,
Ecore_Cb cancel_cb)
Ecore_Thread_Cb end_cb,
Ecore_Thread_Cb cancel_cb)
{
Ecore_Thread *thread;
@ -276,7 +276,7 @@ eio_long_file_set(Eio_File *common,
common->error = 0;
common->thread = NULL;
/* Be aware that ecore_thread_run could call cancel_cb if something goes wrong.
/* Be aware that ecore_thread_feedback_run could call cancel_cb if something goes wrong.
This means that common would be destroyed if thread == NULL.
*/
thread = ecore_thread_feedback_run(heavy_cb,
@ -294,9 +294,9 @@ eio_file_set(Eio_File *common,
Eio_Done_Cb done_cb,
Eio_Error_Cb error_cb,
const void *data,
Ecore_Thread_Heavy_Cb job_cb,
Ecore_Cb end_cb,
Ecore_Cb cancel_cb)
Ecore_Thread_Cb job_cb,
Ecore_Thread_Cb end_cb,
Ecore_Thread_Cb cancel_cb)
{
Ecore_Thread *thread;