DSWaylandSurface: fix bug for sending destroy signal 00/242500/1
authorDoyoun Kang <doyoun.kang@samsung.com>
Thu, 27 Aug 2020 06:43:55 +0000 (15:43 +0900)
committerSung-Jin Park <sj76.park@samsung.com>
Thu, 27 Aug 2020 07:51:58 +0000 (16:51 +0900)
Change-Id: I3a0b97237013a36ce9e85cd19d4fd4c4a338edb6

src/DSWaylandServer/DSWaylandSurface.cpp
src/DSWaylandServer/DSWaylandSurfacePrivate.h

index b11b735..9e180de 100644 (file)
@@ -76,6 +76,7 @@ bool DSWaylandSurfaceCommitInfo::bufferChanged()
 DSWaylandSurfacePrivate::DSWaylandSurfacePrivate(DSWaylandSurface *p_ptr)
        : DSObjectPrivate(p_ptr),
          __p_ptr(p_ptr),
+         __deleted(false),
          __commitInfoPending{std::make_unique<DSWaylandSurfaceCommitInfo>()},
          __commitInfo{std::make_shared<DSWaylandSurfaceCommitInfo>()},
          __waylandClient(nullptr),
@@ -86,6 +87,7 @@ DSWaylandSurfacePrivate::DSWaylandSurfacePrivate(DSWaylandSurface *p_ptr)
 DSWaylandSurfacePrivate::DSWaylandSurfacePrivate(DSWaylandSurface *p_ptr, DSWaylandClient *waylandClient, uint32_t id)
        : DSObjectPrivate(p_ptr),
          __p_ptr(p_ptr),
+         __deleted(false),
          __commitInfoPending{std::make_unique<DSWaylandSurfaceCommitInfo>()},
          __commitInfo{std::make_shared<DSWaylandSurfaceCommitInfo>()},
          __waylandClient(waylandClient),
@@ -115,18 +117,12 @@ void DSWaylandSurfacePrivate::surface_bind_resource(Resource *resource)
 
 void DSWaylandSurfacePrivate::surface_destroy_resource(Resource *resource)
 {
+       __sendSurfaceDestroy();
 }
 
 void DSWaylandSurfacePrivate::surface_destroy(Resource *resource)
 {
-       DS_GET_PUB(DSWaylandSurface);
-
-       DSWaylandCompositor *dswCompositor = DSWaylandCompositor::getInstance();
-       if (dswCompositor)
-       {
-               dswCompositor->sendSurfaceDestroy(pub);
-       }
-       DSWaylandCompositor::releaseInstance();
+       __sendSurfaceDestroy();
 }
 
 void DSWaylandSurfacePrivate::surface_attach(Resource *resource, struct ::wl_resource *buffer, int32_t x, int32_t y)
@@ -219,6 +215,24 @@ void DSWaylandSurfacePrivate::surface_damage_buffer(Resource *resource, int32_t
        commitInfoPendingPriv->damageBuffer.height = height;
 }
 
+void DSWaylandSurfacePrivate::__sendSurfaceDestroy(void)
+{
+       if (__deleted) return;
+
+       DS_GET_PUB(DSWaylandSurface);
+
+       DSWaylandCompositor *dswCompositor = DSWaylandCompositor::getInstance();
+       if (dswCompositor)
+       {
+               dswCompositor->sendSurfaceDestroy(pub);
+       }
+       DSWaylandCompositor::releaseInstance();
+
+       __deleted = true;
+}
+
+
+
 DS_WAYLAND_IMPL_FROM_RESOURCE(DSWaylandSurface);
 
 /* DSWaylandSurface */
index 0ed0577..0f09d5b 100644 (file)
@@ -109,6 +109,10 @@ protected:
        void surface_damage_buffer(Resource *resource, int32_t x, int32_t y, int32_t width, int32_t height) override;
 
 private:
+       void __sendSurfaceDestroy(void);
+
+private:
+       bool __deleted;
        std::unique_ptr<DSWaylandSurfaceCommitInfo> __commitInfoPending;
        std::shared_ptr<DSWaylandSurfaceCommitInfo> __commitInfo;
        DSWaylandClient *__waylandClient;