diff options
author | eunhae choi <eunhae1.choi@samsung.com> | 2016-12-20 02:20:15 -0800 |
---|---|---|
committer | Gerrit Code Review <gerrit@review.vlan103.tizen.org> | 2016-12-20 02:20:15 -0800 |
commit | 5e4e5a07302bd66271839794d93639a75c6c53e7 (patch) | |
tree | f227a2a73edb1fab123a0aa5610f1c1e93273526 | |
parent | 084fdf7027d5f1838cb8e18a3f1eb611a8af534e (diff) | |
parent | bf6cef22e23cf170f1e9cf7216ee8c83b654eca7 (diff) | |
download | libmm-player-accepted/tizen/ivi/20161220.223836.tar.gz libmm-player-accepted/tizen/ivi/20161220.223836.tar.bz2 libmm-player-accepted/tizen/ivi/20161220.223836.zip |
Merge "Move thread creation logic to Murphy to prevent thread lock up" into tizensubmit/tizen/20161220.104958accepted/tizen/wearable/20161220.223807accepted/tizen/tv/20161220.223740accepted/tizen/mobile/20161220.223708accepted/tizen/ivi/20161220.223836accepted/tizen/common/20161220.191037
-rw-r--r-- | src/include/mm_player_resource.h | 2 | ||||
-rw-r--r-- | src/mm_player_resource.c | 36 |
2 files changed, 14 insertions, 24 deletions
diff --git a/src/include/mm_player_resource.h b/src/include/mm_player_resource.h index 88d383a..085a65f 100644 --- a/src/include/mm_player_resource.h +++ b/src/include/mm_player_resource.h @@ -64,8 +64,6 @@ typedef struct { bool by_rm_cb; GCond cond; GMutex lock; - GThread *starter; - GMainLoop *mrp_loop; } MMPlayerResourceManager; int _mmplayer_resource_manager_init(MMPlayerResourceManager *resource_manager, void *user_data); diff --git a/src/mm_player_resource.c b/src/mm_player_resource.c index 5474c0e..c886b0c 100644 --- a/src/mm_player_resource.c +++ b/src/mm_player_resource.c @@ -294,25 +294,26 @@ static int set_resource_release_cb(MMPlayerResourceManager *resource_manager) return ret; } -static gpointer __mmplayer_launch_glib_murphy_loop(void *user_data) -{ - MMPlayerResourceManager *resource_manager= (MMPlayerResourceManager *)user_data; - LOGI("Run mrp_loop"); - g_main_loop_run(resource_manager->mrp_loop); - LOGI("Murphy glib loop exit"); - return NULL; -} - int _mmplayer_resource_manager_init(MMPlayerResourceManager *resource_manager, void *user_data) { MMPLAYER_FENTER(); MMPLAYER_CHECK_RESOURCE_MANAGER_INSTANCE(resource_manager); GMainContext *mrp_ctx = g_main_context_new(); - resource_manager->mrp_loop = g_main_loop_new(mrp_ctx, TRUE); - resource_manager->mloop = mrp_mainloop_glib_get(resource_manager->mrp_loop); - resource_manager->starter = g_thread_new(NULL, (GThreadFunc)__mmplayer_launch_glib_murphy_loop, resource_manager); + if (!mrp_ctx) { + LOGE("- could not create main context for resource manager\n"); + return MM_ERROR_RESOURCE_INTERNAL; + } + + GMainLoop *mrp_loop = g_main_loop_new(mrp_ctx, TRUE); g_main_context_unref(mrp_ctx); + if (!mrp_loop) { + LOGE("- could not create glib mainloop for resource manager\n"); + return MM_ERROR_RESOURCE_INTERNAL; + } + + resource_manager->mloop = mrp_mainloop_glib_get(mrp_loop); + g_main_loop_unref(mrp_loop); if (resource_manager->mloop) { resource_manager->context = mrp_res_create(resource_manager->mloop, mrp_state_callback, user_data); if (resource_manager->context == NULL) { @@ -490,17 +491,8 @@ int _mmplayer_resource_manager_deinit(MMPlayerResourceManager *resource_manager) resource_manager->context = NULL; } - if (resource_manager->mrp_loop) { - g_main_loop_quit(resource_manager->mrp_loop); - g_main_loop_unref(resource_manager->mrp_loop); - resource_manager->mrp_loop = NULL; - } - - g_thread_join(resource_manager->starter); - g_thread_unref(resource_manager->starter); - resource_manager->starter = NULL; - if (resource_manager->mloop) { + mrp_mainloop_quit(resource_manager->mloop, 0); mrp_mainloop_destroy(resource_manager->mloop); resource_manager->mloop = NULL; } |