From d21c9ca96f00231099200414c7a77c79a413a3f3 Mon Sep 17 00:00:00 2001 From: raster Date: Thu, 10 Nov 2011 05:18:43 +0000 Subject: [PATCH] try init and shut down remix outside of thread. git-svn-id: http://svn.enlightenment.org/svn/e/trunk/edje@65002 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33 --- src/lib/edje_multisense.c | 36 ++++++++++++++++++++++++++++-------- 1 file changed, 28 insertions(+), 8 deletions(-) diff --git a/src/lib/edje_multisense.c b/src/lib/edje_multisense.c index a8bd06f..f9c7f91 100644 --- a/src/lib/edje_multisense.c +++ b/src/lib/edje_multisense.c @@ -251,13 +251,33 @@ sound_command_handler(Multisense_Data *msdata) #endif #ifdef HAVE_LIBREMIX +// msdata outside of thread due to thread issues in dlsym etc. +static Multisense_Data *msdata = NULL; + +static void +_msdata_free(void) +{ + // cleanup msdata outside of thread due to thread issues in dlsym etc. + if (!msdata) return; + //cleanup Remix stuffs + remix_destroy(msdata->msenv->remixenv, msdata->player); + remix_destroy(msdata->msenv->remixenv, msdata->deck); + remix_purge(msdata->msenv->remixenv); + + free(msdata->msenv); + free(msdata); + msdata = NULL; +} + static void _player_job(void *data __UNUSED__, Ecore_Thread *th) { fd_set wait_fds; RemixBase *sound; RemixCount process_len; - Multisense_Data *msdata = init_multisense_environment(); +// disable and move outside of thread due to dlsym etc. thread issues +// Multisense_Data * msdata = init_multisense_environment(); + if (!msdata) return; fcntl(command_pipe[0], F_SETFL, O_NONBLOCK); @@ -291,13 +311,6 @@ _player_job(void *data __UNUSED__, Ecore_Thread *th) remix_destroy(msdata->msenv->remixenv, sound); } - //cleanup Remix stuffs - remix_destroy(msdata->msenv->remixenv, msdata->player); - remix_destroy(msdata->msenv->remixenv, msdata->deck); - remix_purge(msdata->msenv->remixenv); - - free(msdata->msenv); - free(msdata); close(command_pipe[0]); close(command_pipe[1]); } @@ -307,6 +320,8 @@ _player_job(void *data __UNUSED__, Ecore_Thread *th) static void _player_cancel(void *data __UNUSED__, Ecore_Thread *th __UNUSED__) { + // cleanup msdata outside of thread due to thread issues in dlsym etc. + _msdata_free(); player_thread = NULL; } #endif @@ -315,6 +330,8 @@ _player_cancel(void *data __UNUSED__, Ecore_Thread *th __UNUSED__) static void _player_end(void *data __UNUSED__, Ecore_Thread *th __UNUSED__) { + // cleanup msdata outside of thread due to thread issues in dlsym etc. + _msdata_free(); player_thread = NULL; } #endif @@ -368,6 +385,9 @@ _edje_multisense_init(void) #ifdef ENABLE_MULTISENSE if (!pipe_initialized && (pipe(command_pipe) != -1)) pipe_initialized = EINA_TRUE; + + // init msdata outside of thread due to thread issues in dlsym etc. + if (!msdata) msdata = init_multisense_environment(); if (!player_thread) player_thread = ecore_thread_run(_player_job, _player_end, _player_cancel, NULL); -- 2.7.4