Fixed B/S
authorHeeJu Kang <mobum.kang@samsung.com>
Fri, 3 May 2013 00:35:45 +0000 (09:35 +0900)
committerHeeJu Kang <mobum.kang@samsung.com>
Fri, 3 May 2013 00:35:45 +0000 (09:35 +0900)
Change-Id: I8601d56ccff14448a64098b8cbf3ebe5faed4c7d
Signed-off-by: HeeJu Kang <mobum.kang@samsung.com>
src/FShell_AppWidgetBuffer.cpp
src/FShell_AppWidgetBuffer.h

index 1961999..ecd8d1f 100644 (file)
@@ -37,8 +37,6 @@
 using namespace std;
 using namespace Tizen::Base;
 using namespace Tizen::Graphics;
-//using namespace Tizen::Ui::Animations;
-//using namespace Tizen::Ui;
 
 namespace Tizen { namespace Shell
 {
@@ -205,14 +203,17 @@ _AppWidgetBuffer::GetXImage(void) const
 }
 
 _AppWidgetBuffer::_Buffer::_Buffer(_AppWidgetBuffer* pAppWidgetBuffer)
-       : __allocated(false)
-       , __locked(false)
+       : __locked(false)
        , __pixmap(0)
        , __depth(sizeof(int))
        , __pAppWidgetBuffer(pAppWidgetBuffer)
        , __gc(null)
        , __pXImage(null)
 {
+       __xShmSegmentInfo.shmseg = 0;
+       __xShmSegmentInfo.shmid = -1;
+       __xShmSegmentInfo.shmaddr = 0;
+       __xShmSegmentInfo.readOnly = False;
 }
 
 _AppWidgetBuffer::_Buffer::~_Buffer(void)
@@ -228,8 +229,6 @@ _AppWidgetBuffer::_Buffer::AllocBuffer(Pixmap pixmap, const Tizen::Graphics::Flo
 
        OnCreateBuffer();
 
-       __allocated = true;
-
        return LockBuffer();
 }
 
@@ -237,8 +236,6 @@ void
 _AppWidgetBuffer::_Buffer::DeallocBuffer(void)
 {
        OnDeleteBuffer();
-
-       __allocated = false;
 }
 
 void*
@@ -272,24 +269,34 @@ _AppWidgetBuffer::_Buffer::GetXImage(void) const
 void
 _AppWidgetBuffer::_Buffer::DeleteBuffer(void)
 {
-       if (__allocated)
+       if (__pAppWidgetBuffer->__pDisplay.get())
        {
-               XFreeGC(__pAppWidgetBuffer->__pDisplay.get(), __gc);
-               XShmDetach(__pAppWidgetBuffer->__pDisplay.get(), &__xShmSegmentInfo);
-               XDestroyImage(__pXImage);
-
-               if (__xShmSegmentInfo.shmaddr != (void *)-1)
+               if (__gc)
                {
-                       shmdt(__xShmSegmentInfo.shmaddr);
-               }
+                       XFreeGC(__pAppWidgetBuffer->__pDisplay.get(), __gc);
+                       XShmDetach(__pAppWidgetBuffer->__pDisplay.get(), &__xShmSegmentInfo);
 
-               if (__xShmSegmentInfo.shmid >= 0)
-               {
-                       shmctl(__xShmSegmentInfo.shmid, IPC_RMID, 0);
+                       if (__pXImage)
+                       {
+                               XDestroyImage(__pXImage);
+                               __pXImage = null;
+                       }
+
+                       if (__xShmSegmentInfo.shmaddr)
+                       {
+                               shmdt(__xShmSegmentInfo.shmaddr);
+                               __xShmSegmentInfo.shmaddr = null;
+                       }
+
+                       if (__xShmSegmentInfo.shmid >= 0)
+                       {
+                               shmctl(__xShmSegmentInfo.shmid, IPC_RMID, 0);
+                               __xShmSegmentInfo.shmid = -1;
+                       }
+
+                       __gc = null;
                }
        }
-
-       __allocated = false;
 }
 
 void
@@ -330,11 +337,13 @@ CATCH:
        if (__xShmSegmentInfo.shmaddr != (void *)-1)
        {
                shmdt(__xShmSegmentInfo.shmaddr);
+               __xShmSegmentInfo.shmaddr = null;
        }
 
        if (__xShmSegmentInfo.shmid >= 0)
        {
                shmctl(__xShmSegmentInfo.shmid, IPC_RMID, 0);
+               __xShmSegmentInfo.shmid = -1;
        }
 }
 
index a16fdda..07be602 100644 (file)
@@ -96,7 +96,6 @@ private:
                virtual void OnUnlockBuffer(void);
 
        protected:
-               bool __allocated;
                bool __locked;
                Pixmap __pixmap;
                int __depth;