X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fmm_camcorder_resource.c;h=8ae077ef338079e6b235e49e81c413c6524b7923;hb=48a734a49365f9cdc7ae77cdc9e666973be3766c;hp=3c15e0adb349155ea11281259f0b6b6fbc6dc417;hpb=0cc4a2339ab801b021dd6294c8059e51acdd3a25;p=platform%2Fcore%2Fmultimedia%2Flibmm-camcorder.git diff --git a/src/mm_camcorder_resource.c b/src/mm_camcorder_resource.c index 3c15e0a..8ae077e 100644 --- a/src/mm_camcorder_resource.c +++ b/src/mm_camcorder_resource.c @@ -320,9 +320,32 @@ static int __mmcamcorder_resource_set_release_cb(MMCamcorderResourceManager *res int _mmcamcorder_resource_manager_init(MMCamcorderResourceManager *resource_manager, void *user_data) { + GMainContext *mrp_ctx = NULL; + GMainLoop *mrp_loop = NULL; + MMCAMCORDER_CHECK_RESOURCE_MANAGER_INSTANCE(resource_manager); - resource_manager->mloop = mrp_mainloop_glib_get(g_main_loop_new(NULL, TRUE)); + mrp_ctx = g_main_context_new(); + if (!mrp_ctx) { + _mmcam_dbg_err("failed to get create glib context for mrp"); + return MM_ERROR_RESOURCE_INTERNAL; + } + + mrp_loop = g_main_loop_new(mrp_ctx, TRUE); + + g_main_context_unref(mrp_ctx); + mrp_ctx = NULL; + + if (!mrp_loop) { + _mmcam_dbg_err("failed to get create glib loop for mrp"); + return MM_ERROR_RESOURCE_INTERNAL; + } + + resource_manager->mloop = mrp_mainloop_glib_get(mrp_loop); + + g_main_loop_unref(mrp_loop); + mrp_loop = NULL; + if (!resource_manager->mloop) { _mmcam_dbg_err("failed to get mainloop for mrp"); return MM_ERROR_RESOURCE_INTERNAL; @@ -331,8 +354,10 @@ int _mmcamcorder_resource_manager_init(MMCamcorderResourceManager *resource_mana resource_manager->context = mrp_res_create(resource_manager->mloop, __mmcamcorder_resource_state_callback, user_data); if (!resource_manager->context) { _mmcam_dbg_err("could not get context for mrp"); + mrp_mainloop_destroy(resource_manager->mloop); resource_manager->mloop = NULL; + return MM_ERROR_RESOURCE_INTERNAL; } @@ -420,13 +445,16 @@ int _mmcamcorder_resource_manager_deinit(MMCamcorderResourceManager *resource_ma mrp_res_delete_resource_set(resource_manager->rset); resource_manager->rset = NULL; } + if (resource_manager->context) { _mmcam_dbg_log("destroy resource context"); mrp_res_destroy(resource_manager->context); resource_manager->context = NULL; } + if (resource_manager->mloop) { _mmcam_dbg_log("destroy resource mainloop"); + mrp_mainloop_quit(resource_manager->mloop, 0); mrp_mainloop_destroy(resource_manager->mloop); resource_manager->mloop = NULL; }