exception handling for prevent crash 51/36151/1 accepted/tizen/tv/20150303.071724 submit/tizen_tv/20150303.054037
authorMinkyu Kang <mk7.kang@samsung.com>
Tue, 3 Mar 2015 05:34:53 +0000 (14:34 +0900)
committerMinkyu Kang <mk7.kang@samsung.com>
Tue, 3 Mar 2015 05:34:53 +0000 (14:34 +0900)
This patch is for fixing jira issue TT-16
[Videoplayer] Crash when playlist or uri are wrong

Change-Id: I622eb96ac2c84141daf03fd23b26c66e83c59e28
Signed-off-by: Minkyu Kang <mk7.kang@samsung.com>
include/view_player.h
src/main.cpp
src/view_player.cpp

index 64c4195..d21c226 100644 (file)
@@ -45,6 +45,7 @@ private:
        bool m_PlayerInit(void);
        void m_ShowBar(void);
        void m_HideBar(void);
+       void m_Fini(void);
 
 private:
        static Eina_Bool sm_CbDrawAnimation(void *dt);
index a22e5ce..5c6c013 100644 (file)
@@ -128,7 +128,10 @@ void CVideoPlayerApp::OnTerminate(void)
 {
        ASSERT(m_pApp);
 
-       CViewMgr::Finalize();
+       if (m_pVmgr) {
+               CViewMgr::Finalize();
+               m_pVmgr = NULL;
+       }
 
        if (m_pApp->win)
                evas_object_del(m_pApp->win);
@@ -138,14 +141,16 @@ void CVideoPlayerApp::OnPause(void)
 {
        ASSERT(m_pApp);
 
-       m_pVmgr->Pause();
+       if (m_pVmgr)
+               m_pVmgr->Pause();
 }
 
 void CVideoPlayerApp::OnResume(void)
 {
        ASSERT(m_pApp);
 
-       m_pVmgr->Resume();
+       if (m_pVmgr)
+               m_pVmgr->Resume();
 }
 
 void CVideoPlayerApp::OnAppControl(app_control_h app_control)
@@ -174,11 +179,15 @@ void CVideoPlayerApp::OnAppControl(app_control_h app_control)
 
        if (!m_pVmgr->PushView(VIEW_ID_PLAYER, &param)) {
                _ERR("View push failed");
+
                CViewMgr::Finalize();
+               m_pVmgr = NULL;
+
                free(uri);
                free(playlist);
 
                elm_exit();
+               return;
        }
 
        free(uri);
index 0ab0460..30a2895 100644 (file)
@@ -335,8 +335,10 @@ void CPlayerView::sm_CbPlayComplete(void *dt)
        else if (data->repeat == E_REPEAT_ALL)
                r = playermgr_set_next_video(data->player, EINA_TRUE);
 
-       if (!r)
+       if (!r) {
                elm_exit();
+               return;
+       }
 
        action = ACTION_INIT;
        CViewMgr::GetInstance()->UpdateView(data->id, (void *)&action);
@@ -585,13 +587,14 @@ bool CPlayerView::Create(void *data)
 
        r = m_UiInit();
        if (!r) {
-               delete m;
-               m = NULL;
+               _ERR("failed to init UI");
+               m_Fini();
                return false;
        }
 
        if (!m_PlayerInit()) {
                _ERR("failed to play video");
+               m_Fini();
                return false;
        }
 
@@ -603,6 +606,7 @@ bool CPlayerView::Create(void *data)
        m->drawanim_timer = ecore_timer_add(0.8, sm_CbDrawAnimation, m);
        if (!m->drawanim_timer) {
                _ERR("failed to add draw timer");
+               m_Fini();
                return false;
        }
 
@@ -611,37 +615,49 @@ bool CPlayerView::Create(void *data)
        return true;
 }
 
-void CPlayerView::Destroy(void)
+void CPlayerView::m_Fini(void)
 {
-       ASSERT(m);
-
-       CBaseView::Destroy();
-
        if (m->drawanim_timer)
                ecore_timer_del(m->drawanim_timer);
+       m->drawanim_timer = NULL;
 
        delete m->mediadata;
        m->mediadata = NULL;
 
        playermgr_fini(m->player);
+       m->player = NULL;
 
        timeout_handler_fini(m->timeout_handle);
+       m->timeout_handle = NULL;
 
        free(m->id);
+       m->id = NULL;
 
        m->volume->Destroy();
        delete m->volume;
+       m->volume = NULL;
 
        m->control->Destroy();
        delete m->control;
+       m->control = NULL;
 
        m->slider->Destroy();
        delete m->slider;
+       m->slider = NULL;
 
        delete m;
        m = NULL;
 }
 
+void CPlayerView::Destroy(void)
+{
+       ASSERT(m);
+
+       CBaseView::Destroy();
+
+       m_Fini();
+}
+
 Evas_Object *CPlayerView::Base(void)
 {
        ASSERT(m);