Fixed problem that cant'receive PRESENCE/ABSENCE if a least one device
authorsaerome.kim <saerome.kim@samsung.com>
Wed, 4 Sep 2019 11:57:51 +0000 (20:57 +0900)
committersaerome.kim <saerome.kim@samsung.com>
Mon, 16 Sep 2019 12:04:43 +0000 (21:04 +0900)
is not deceted.

Problem: PRESENCE/ABSENCE callback are not called if no device is detected.
Cause: monitor->presence_detected_bitmask might be updated in
       __a_sensor_presence_detected() according to the monitor->presence_mode.
       However, this function __ua_monitor_send_user_presence_cb() can be called
       before it is updated when "account" is valid.
Soultion: remove checking user_handle in __ua_monitor_send_user_presence_cb()

Change-Id: I6ce39a3e12c22d098a54d86abc165722495c43a7
Signed-off-by: saerome.kim <saerome.kim@samsung.com>
packaging/capi-network-ua.spec
src/user-awareness-monitors.c

index 077649fc85cd642660c7a5f01d9b0f18bcf1b7bf..16c4586a4c1f09fd4749f37675609669f9505445 100644 (file)
@@ -1,6 +1,6 @@
 Name: capi-network-ua
 Summary: User Awareness Framework CAPI
-Version: 0.8.4
+Version: 0.8.5
 Release: 1
 License: Apache-2.0
 Source0: %{name}-%{version}.tar.gz
index d06387e803307a3dfe3839806221b6c6504876e1..4ebe57b6856c96d14b1e96e88451b19f698f21c3 100644 (file)
@@ -265,7 +265,7 @@ static void __ua_monitor_send_user_presence_cb(ua_monitor_s *monitor,
                ua_user_state_info_s *user_state)
 {
        FUNC_ENTRY;
-       unsigned int env_presence_bm = 0;
+       unsigned int env_presence_bitmask = 0;
        unsigned int user_sensor_bitmask = user_state->sensor_bitmask;
        gboolean and_condition = 0;
        gboolean or_condition = 0;
@@ -274,14 +274,14 @@ static void __ua_monitor_send_user_presence_cb(ua_monitor_s *monitor,
 
        ua_user_h user_handle = _ua_get_user_handle_by_account(
                        user_state->account);
-       env_presence_bm = monitor->presence_detected_bitmask
+       env_presence_bitmask = monitor->presence_detected_bitmask
                        & (UA_SENSOR_MOTION | UA_SENSOR_LIGHT);
 
        /**
         * Check whether user_handle present or not and also check
         * whether presence has been started or not.
         */
-       if (!user_handle || user_state->cb_sent
+       if (user_state->cb_sent
                        || !monitor->presence_user_cb.callback
                        || !monitor->presence_detection_started) {
                FUNC_EXIT;
@@ -290,16 +290,16 @@ static void __ua_monitor_send_user_presence_cb(ua_monitor_s *monitor,
 
        UA_DBG("Bitmasks: user's sensor [%u], env_pres [%u], " \
                        "conditions: AND [%u] - OR [%u]",
-                       user_sensor_bitmask, env_presence_bm,
+                       user_sensor_bitmask, env_presence_bitmask,
                        monitor->presence_bitmask_and, monitor->presence_bitmask_or);
 
        and_condition = monitor->presence_bitmask_and ==
                        (monitor->presence_bitmask_and
-                       & (user_sensor_bitmask | env_presence_bm));
+                       & (user_sensor_bitmask | env_presence_bitmask));
 
        or_condition = !monitor->presence_bitmask_or ||
                        (monitor->presence_bitmask_or
-                       & (user_sensor_bitmask | env_presence_bm));
+                       & (user_sensor_bitmask | env_presence_bitmask));
 
        UA_DBG("Conditions': AND[%s] [%s] OR[%s]",
                        and_condition ? "true" : "false",