raster pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=687b06fb3ff679c8d7464c9858365ea4eae4eaa3
commit 687b06fb3ff679c8d7464c9858365ea4eae4eaa3 Author: Carsten Haitzler (Rasterman) <[email protected]> Date: Sat Jul 20 11:44:05 2019 +0100 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. --- src/lib/ecore/efl_thread.c | 72 +++++++++++++++++----------------------------- 1 file changed, 27 insertions(+), 45 deletions(-) diff --git a/src/lib/ecore/efl_thread.c b/src/lib/ecore/efl_thread.c index 1545c74597..f08be0e119 100644 --- a/src/lib/ecore/efl_thread.c +++ b/src/lib/ecore/efl_thread.c @@ -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; } -void -_appthread_threadio_call(Eo *obj EINA_UNUSED, Efl_Appthread_Data *pd, - void *func_data, EFlThreadIOCall func, Eina_Free_Cb func_free_cb) +static void +_threadio_call(int fd, void *func_data, EFlThreadIOCall func, Eina_Free_Cb func_free_cb) { - Thread_Data *thdat = pd->thdat; Control_Data 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[1] = func_data; 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 _efl_thread_efl_threadio_call(Eo *obj EINA_UNUSED, Efl_Thread_Data *pd, 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_Reply rep; memset(&cmd, 0, sizeof(cmd)); - cmd.d.command = CMD_CALL; + cmd.d.command = CMD_CALL_SYNC; cmd.d.ptr[0] = func; cmd.d.ptr[1] = func_data; 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 * @@ -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) { Thread_Data *thdat = pd->thdat; - Control_Data cmd; - 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; + return _threadio_call_sync(thdat->ctrl.in, func_data, func, func_free_cb); } EOLIAN static void * _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) { - Control_Data cmd; - 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; + return _threadio_call_sync(pd->ctrl.in, func_data, func, func_free_cb); } ////////////////////////////////////////////////////////////////////////// --
