ecore - efl thread - reduce copy & paste and merge into single func
the call and call sync stuff was almost entirely copy & paste - this moves all the common code into shared funcs that reduce code bloat. it also moved from heap to stack for sync reply struct location.
This commit is contained in:
parent
bf01c2382a
commit
687b06fb3f
|
@ -1035,11 +1035,9 @@ _efl_thread_efl_io_writer_can_write_get(const Eo *obj EINA_UNUSED, Efl_Thread_Da
|
||||||
return pd->fd.can_write;
|
return pd->fd.can_write;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
static void
|
||||||
_appthread_threadio_call(Eo *obj EINA_UNUSED, Efl_Appthread_Data *pd,
|
_threadio_call(int fd, void *func_data, EFlThreadIOCall func, Eina_Free_Cb func_free_cb)
|
||||||
void *func_data, EFlThreadIOCall func, Eina_Free_Cb func_free_cb)
|
|
||||||
{
|
{
|
||||||
Thread_Data *thdat = pd->thdat;
|
|
||||||
Control_Data cmd;
|
Control_Data cmd;
|
||||||
|
|
||||||
memset(&cmd, 0, sizeof(cmd));
|
memset(&cmd, 0, sizeof(cmd));
|
||||||
|
@ -1047,21 +1045,41 @@ _appthread_threadio_call(Eo *obj EINA_UNUSED, Efl_Appthread_Data *pd,
|
||||||
cmd.d.ptr[0] = func;
|
cmd.d.ptr[0] = func;
|
||||||
cmd.d.ptr[1] = func_data;
|
cmd.d.ptr[1] = func_data;
|
||||||
cmd.d.ptr[2] = func_free_cb;
|
cmd.d.ptr[2] = func_free_cb;
|
||||||
_efl_thread_pipe_write(thdat->ctrl.in, &cmd, sizeof(Control_Data));
|
_efl_thread_pipe_write(fd, &cmd, sizeof(Control_Data));
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
_appthread_threadio_call(Eo *obj EINA_UNUSED, Efl_Appthread_Data *pd,
|
||||||
|
void *func_data, EFlThreadIOCall func, Eina_Free_Cb func_free_cb)
|
||||||
|
{
|
||||||
|
Thread_Data *thdat = pd->thdat;
|
||||||
|
_threadio_call(thdat->ctrl.in, func_data, func, func_free_cb);
|
||||||
}
|
}
|
||||||
|
|
||||||
EOLIAN static void
|
EOLIAN static void
|
||||||
_efl_thread_efl_threadio_call(Eo *obj EINA_UNUSED, Efl_Thread_Data *pd,
|
_efl_thread_efl_threadio_call(Eo *obj EINA_UNUSED, Efl_Thread_Data *pd,
|
||||||
void *func_data, EFlThreadIOCall func, Eina_Free_Cb func_free_cb)
|
void *func_data, EFlThreadIOCall func, Eina_Free_Cb func_free_cb)
|
||||||
|
{
|
||||||
|
_threadio_call(pd->ctrl.in, func_data, func, func_free_cb);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void *
|
||||||
|
_threadio_call_sync(int fd, void *func_data, EFlThreadIOCallSync func, Eina_Free_Cb func_free_cb)
|
||||||
{
|
{
|
||||||
Control_Data cmd;
|
Control_Data cmd;
|
||||||
|
Control_Reply rep;
|
||||||
|
|
||||||
memset(&cmd, 0, sizeof(cmd));
|
memset(&cmd, 0, sizeof(cmd));
|
||||||
cmd.d.command = CMD_CALL;
|
cmd.d.command = CMD_CALL_SYNC;
|
||||||
cmd.d.ptr[0] = func;
|
cmd.d.ptr[0] = func;
|
||||||
cmd.d.ptr[1] = func_data;
|
cmd.d.ptr[1] = func_data;
|
||||||
cmd.d.ptr[2] = func_free_cb;
|
cmd.d.ptr[2] = func_free_cb;
|
||||||
_efl_thread_pipe_write(pd->ctrl.in, &cmd, sizeof(Control_Data));
|
cmd.d.ptr[3] = &rep;
|
||||||
|
rep.data = NULL;
|
||||||
|
eina_semaphore_new(&(rep.sem), 0);
|
||||||
|
_efl_thread_pipe_write(fd, &cmd, sizeof(Control_Data));
|
||||||
|
eina_semaphore_lock(&(rep.sem));
|
||||||
|
return rep.data;
|
||||||
}
|
}
|
||||||
|
|
||||||
void *
|
void *
|
||||||
|
@ -1069,50 +1087,14 @@ _appthread_threadio_call_sync(Eo *obj EINA_UNUSED, Efl_Appthread_Data *pd,
|
||||||
void *func_data, EFlThreadIOCallSync func, Eina_Free_Cb func_free_cb)
|
void *func_data, EFlThreadIOCallSync func, Eina_Free_Cb func_free_cb)
|
||||||
{
|
{
|
||||||
Thread_Data *thdat = pd->thdat;
|
Thread_Data *thdat = pd->thdat;
|
||||||
Control_Data cmd;
|
return _threadio_call_sync(thdat->ctrl.in, func_data, func, func_free_cb);
|
||||||
Control_Reply *rep;
|
|
||||||
void *data;
|
|
||||||
|
|
||||||
memset(&cmd, 0, sizeof(cmd));
|
|
||||||
cmd.d.command = CMD_CALL_SYNC;
|
|
||||||
cmd.d.ptr[0] = func;
|
|
||||||
cmd.d.ptr[1] = func_data;
|
|
||||||
cmd.d.ptr[2] = func_free_cb;
|
|
||||||
rep = malloc(sizeof(Control_Reply));
|
|
||||||
if (!rep) return NULL;
|
|
||||||
cmd.d.ptr[3] = rep;
|
|
||||||
rep->data = NULL;
|
|
||||||
eina_semaphore_new(&(rep->sem), 0);
|
|
||||||
_efl_thread_pipe_write(thdat->ctrl.in, &cmd, sizeof(Control_Data));
|
|
||||||
eina_semaphore_lock(&(rep->sem));
|
|
||||||
data = rep->data;
|
|
||||||
free(rep);
|
|
||||||
return data;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
EOLIAN static void *
|
EOLIAN static void *
|
||||||
_efl_thread_efl_threadio_call_sync(Eo *obj EINA_UNUSED, Efl_Thread_Data *pd,
|
_efl_thread_efl_threadio_call_sync(Eo *obj EINA_UNUSED, Efl_Thread_Data *pd,
|
||||||
void *func_data, EFlThreadIOCallSync func, Eina_Free_Cb func_free_cb)
|
void *func_data, EFlThreadIOCallSync func, Eina_Free_Cb func_free_cb)
|
||||||
{
|
{
|
||||||
Control_Data cmd;
|
return _threadio_call_sync(pd->ctrl.in, func_data, func, func_free_cb);
|
||||||
Control_Reply *rep;
|
|
||||||
void *data;
|
|
||||||
|
|
||||||
memset(&cmd, 0, sizeof(cmd));
|
|
||||||
cmd.d.command = CMD_CALL_SYNC;
|
|
||||||
cmd.d.ptr[0] = func;
|
|
||||||
cmd.d.ptr[1] = func_data;
|
|
||||||
cmd.d.ptr[2] = func_free_cb;
|
|
||||||
rep = malloc(sizeof(Control_Reply));
|
|
||||||
if (!rep) return NULL;
|
|
||||||
cmd.d.ptr[3] = rep;
|
|
||||||
rep->data = NULL;
|
|
||||||
eina_semaphore_new(&(rep->sem), 0);
|
|
||||||
_efl_thread_pipe_write(pd->ctrl.in, &cmd, sizeof(Control_Data));
|
|
||||||
eina_semaphore_lock(&(rep->sem));
|
|
||||||
data = rep->data;
|
|
||||||
free(rep);
|
|
||||||
return data;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
|
Loading…
Reference in New Issue