DSWaylandTouch: fix crash at the constructor and setFocus() 41/241841/1
authorSung-Jin Park <sj76.park@samsung.com>
Tue, 18 Aug 2020 07:28:56 +0000 (16:28 +0900)
committerSung-Jin Park <sj76.park@samsung.com>
Thu, 20 Aug 2020 10:12:00 +0000 (19:12 +0900)
Change-Id: I6406ab69856a7c21467ee11888edf122f27e9f7a
Signed-off-by: Sung-Jin Park <sj76.park@samsung.com>
src/DSWaylandServer/DSWaylandTouch.cpp

index c2a3fa1..25a267b 100644 (file)
@@ -35,7 +35,7 @@ DSWaylandTouchPrivate::DSWaylandTouchPrivate(DSWaylandSeat *seat, DSWaylandTouch
        : DSObjectPrivate(touch),
          __p_ptr(touch),
          __seat(seat),
-         __compositor(seat->getCompositor()),
+         __compositor(seat ? (seat->getCompositor()) : nullptr),
          __waylandSurface(nullptr),
          __wlTouchResource(nullptr)
 {
@@ -52,8 +52,12 @@ void DSWaylandTouchPrivate::setFocus(DSWaylandSurface *waylandSurface)
 
        __waylandSurface = waylandSurface;
 
-       if (!waylandSurface)
+       if (!waylandSurface || !waylandSurface->hasResource())
+       {
+               __wlTouchResource = nullptr;
+               DSLOG_INF("DSWaylandTouchPrivate", "wlTouchResource has been set to null.");
                return;
+       }
 
        struct ::wl_resource *surface = waylandSurface->getWlResource();
        auto client = wl_resource_get_client(surface);