Fix crash issue when the process is terminated 84/99784/2
authorJihoon Kim <jihoon48.kim@samsung.com>
Thu, 24 Nov 2016 06:16:01 +0000 (15:16 +0900)
committerJihoon Kim <jihoon48.kim@samsung.com>
Thu, 24 Nov 2016 06:16:52 +0000 (15:16 +0900)
Unpaired eldbus_shutdown makes crash.

Change-Id: I926f10091b95610294e62c3a71cdf6a5702c898a
Signed-off-by: Jihoon Kim <jihoon48.kim@samsung.com>
scl/gwes/efl/sclevents-efl.cpp

index c39551a..3519940 100644 (file)
@@ -48,6 +48,8 @@ using namespace scl;
 #define E_KEYBOARD_SERVICE_NAVI_IFC_NAME "org.tizen.KBGestureNavigation"
 #define E_KEYBOARD_SERVICE_NAVI_OBJ_PATH "/org/tizen/KBGestureNavigation"
 static Eldbus_Connection *eldbus_conn = NULL;
+static Eldbus_Object *eldbus_bus_obj = NULL;
+
 typedef enum _Gesture {
      ONE_FINGER_HOVER = 0,
      ONE_FINGER_SINGLE_TAP = 15,
@@ -238,34 +240,57 @@ static void gesture_cb(void *data, const Eldbus_Message *msg)
 
 static void gestures_tracker_register()
 {
-    Eldbus_Object *obj;
-    Eldbus_Proxy *proxy;
+    Eldbus_Proxy *proxy = NULL;
+
+    if (eldbus_conn)
+        return;
 
     eldbus_init();
     LOGD("Registering callback for GestureDetected signal");
     if (!(eldbus_conn = eldbus_connection_get(ELDBUS_CONNECTION_TYPE_SESSION))) {
-        LOGD("Error: Unable to get session bus");
+        LOGW("Error: Unable to get session bus");
         return;
     }
-    obj = eldbus_object_get(eldbus_conn, E_KEYBOARD_SERVICE_BUS_NAME, E_KEYBOARD_SERVICE_NAVI_OBJ_PATH);
-    if (!obj) LOGD("Error: Getting object failed");
 
-    proxy = eldbus_proxy_get(obj, E_KEYBOARD_SERVICE_NAVI_IFC_NAME);
-    if (!proxy) LOGD("Error: Getting proxy failed");
+    eldbus_bus_obj = eldbus_object_get(eldbus_conn, E_KEYBOARD_SERVICE_BUS_NAME, E_KEYBOARD_SERVICE_NAVI_OBJ_PATH);
+    if (!eldbus_bus_obj) {
+        LOGW("Error: Getting object failed");
+        goto obj_err;
+    }
+
+    proxy = eldbus_proxy_get(eldbus_bus_obj, E_KEYBOARD_SERVICE_NAVI_IFC_NAME);
+    if (!proxy) {
+        LOGW("Error: Getting proxy failed");
+        goto proxy_err;
+    }
+
     if (!eldbus_proxy_signal_handler_add(proxy, "KBGestureDetected", gesture_cb, NULL))
-        LOGD("No signal handler returned");
+        LOGW("No signal handler returned");
+
     LOGD("Callback registration successful");
     return;
+
+proxy_err:
+    eldbus_object_unref(eldbus_bus_obj);
+    eldbus_bus_obj = NULL;
+obj_err:
+    eldbus_connection_unref(eldbus_conn);
+    eldbus_conn = NULL;
 }
 
 static void gestures_tracker_unregister()
 {
+    if (eldbus_bus_obj) {
+        eldbus_object_unref(eldbus_bus_obj);
+        eldbus_bus_obj = NULL;
+    }
+
     if (eldbus_conn) {
         eldbus_connection_unref(eldbus_conn);
         eldbus_conn = NULL;
-    }
 
-    eldbus_shutdown();
+        eldbus_shutdown();
+    }
 }
 #endif
 /**