Add 'm_BoxWrt_isSuspended' falg to avoid duplicated suspend.
authorTaejeong Lee <taejeong.lee@samsung.com>
Sat, 8 Jun 2013 13:12:01 +0000 (22:12 +0900)
committerTaejeong Lee <taejeong.lee@samsung.com>
Sat, 8 Jun 2013 14:27:19 +0000 (23:27 +0900)
[Issue#] N/A
[Problem] Crash when try to suspend wrtCore.
[Cause] N/A
[Solution] Add 'm_BoxWrt_isSuspended' falg to avoid duplicated suspend.

Change-Id: Ia194a5aa917f06ecec36a8e5f4837d439d5071ab

src/Plugin/AppBoxPlugin/AppBoxRenderBuffer.cpp
src/Plugin/AppBoxPlugin/AppBoxRenderView.cpp [changed mode: 0755->0644]
src/Plugin/AppBoxPlugin/AppBoxRenderView.h

index 5456926..088c57d 100644 (file)
@@ -72,7 +72,13 @@ void AppBoxRenderBuffer::didHandleTouchEvent(
     } else {
         if (!m_touchTimer) {
             startCanvasUpdate();
-            m_renderView->m_boxWrt->Resume();
+
+            // temp condition
+            if (m_renderView->m_boxWrt_isSuspended == true)
+            {
+                m_renderView->m_boxWrt_isSuspended = false;
+                m_renderView->m_boxWrt->Resume();
+            }
         } else {
             deleteTouchTimer();
         }
@@ -96,7 +102,14 @@ Eina_Bool AppBoxRenderBuffer::fireTouchTimerCallback(void* data)
     LogD("enter");
     AppBoxRenderBuffer* This = static_cast<AppBoxRenderBuffer*>(data); 
     This->stopCanvasUpdate();
-    This->m_renderView->m_boxWrt->Suspend();
+
+    // temp condition
+    if (This->m_renderView->m_boxWrt_isSuspended == false)
+    {
+        This->m_renderView->m_boxWrt_isSuspended = true;
+        This->m_renderView->m_boxWrt->Suspend();
+    }
+
     This->m_touchTimer = NULL;
 
     return ECORE_CALLBACK_CANCEL;
old mode 100755 (executable)
new mode 100644 (file)
index dfe8396..cced9c5
@@ -55,6 +55,7 @@ AppBoxRenderView::AppBoxRenderView(
     , m_snapshot()
     , m_renderInfo()
     , m_boxWrt()
+    , m_boxWrt_isSuspended(false)
     , m_pdWrt()
     , m_fireRenderTimer()
     , m_pdHelper()
@@ -107,6 +108,7 @@ void AppBoxRenderView::showBox(RenderInfoPtr renderInfo)
     }
 
     m_boxWrt = createWrtCore(boxStartUrl, m_boxWin, m_ewkContext); 
+    m_boxWrt_isSuspended = false;
 
     // in case of showing box by request of pd open
     if (m_pdHelper) {
@@ -185,6 +187,8 @@ void AppBoxRenderView::destroyBoxWrtCore()
     deleteRenderTimer();
     destroyWrtCore(m_boxWrt);
     m_boxWrt.reset();
+    // temp
+    m_boxWrt_isSuspended = false;
 }
 
 void AppBoxRenderView::destroyPdWrtCore()
@@ -373,7 +377,13 @@ Eina_Bool AppBoxRenderView::fireRenderTimerCallback(void* data)
     if (web_provider_livebox_get_mouse_event(This->m_boxId.c_str())) {
         // stop touch timer
         This->m_renderBuffer->deleteTouchTimer();
-        This->m_boxWrt->Suspend();
+
+        // temp condition
+        if (This->m_boxWrt_isSuspended == false)
+        {
+            This->m_boxWrt_isSuspended = true;
+            This->m_boxWrt->Suspend();
+        }
     } else {
         // Before webview should be removed,
         // new evas object with last render data should be created
index 0ee7b0e..ab0f9f7 100644 (file)
@@ -107,6 +107,7 @@ class AppBoxRenderView: public IRenderView {
         Evas_Object* m_snapshot;
         RenderInfoPtr m_renderInfo;
         WrtCorePtr m_boxWrt;
+        bool m_boxWrt_isSuspended;
         WrtCorePtr m_pdWrt;
         Ecore_Timer* m_fireRenderTimer;
         IPdHelperPtr m_pdHelper;