From: Seungyoun Ju Date: Wed, 20 Sep 2017 05:01:52 +0000 (+0900) Subject: Fix : Some properties of adapter couldn't be handled X-Git-Tag: accepted/tizen/4.0/unified/20170929.080706~1 X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fconnectivity%2Fbluetooth-frwk.git;a=commitdiff_plain;h=ffc03ab563535583affa3b153b7254397ae95a90 Fix : Some properties of adapter couldn't be handled [Problem] Some property changed events for adapter object couldn't be handled [Cause & Measure] It returns in the iterate loop Change-Id: I17395d7cea094cac324fec110add10ae8c13cc8b Signed-off-by: Seungyoun Ju --- diff --git a/bt-service/bt-service-event-receiver.c b/bt-service/bt-service-event-receiver.c index bb453f0..c38dbab 100644 --- a/bt-service/bt-service-event-receiver.c +++ b/bt-service/bt-service-event-receiver.c @@ -599,18 +599,21 @@ static void __bt_adapter_property_changed_event(GVariant *msg, const char *path) GError *err = NULL; char *property = NULL; GVariant *param = NULL; + g_variant_iter_init(&value_iter, msg); while ((g_variant_iter_loop(&value_iter, "{sv}", &property, &val))) { BT_INFO("Property %s", property); if (strcasecmp(property, "Discovering") == 0) { gboolean discovering = FALSE; + + if (_bt_adapter_get_status() != BT_ACTIVATED) + continue; + g_variant_get(val, "b", &discovering); - /* Send event to application */ BT_DBG("Discovering %d", discovering); - if (_bt_adapter_get_status() != BT_ACTIVATED) - return; + /* Send event to application */ if (discovering == TRUE) { _bt_set_discovery_status(TRUE); param = g_variant_new("(i)", result); @@ -618,10 +621,12 @@ static void __bt_adapter_property_changed_event(GVariant *msg, const char *path) BLUETOOTH_EVENT_DISCOVERY_STARTED, param); } else { - ret_if(event_id > 0); + if (event_id > 0) + continue; adapter_proxy = _bt_get_adapter_proxy(); - ret_if(adapter_proxy == NULL); + if (adapter_proxy == NULL) + continue; /* Need to stop searching */ ret = g_dbus_proxy_call_sync(adapter_proxy, "StopDiscovery", @@ -642,31 +647,34 @@ static void __bt_adapter_property_changed_event(GVariant *msg, const char *path) } else if (strcasecmp(property, "LEDiscovering") == 0) { gboolean le_discovering = FALSE; + if (_bt_adapter_get_status() != BT_ACTIVATED || + _bt_adapter_get_le_status() != BT_LE_ACTIVATED) + continue; + g_variant_get(val, "b", &le_discovering); BT_DBG("LEDiscovering %d", le_discovering); - if (_bt_adapter_get_status() != BT_ACTIVATED || - _bt_adapter_get_le_status() != BT_LE_ACTIVATED) - return; /* Send event to application */ if (le_discovering == TRUE) { _bt_set_le_scan_status(TRUE); param = g_variant_new("(i)", result); _bt_send_event(BT_LE_ADAPTER_EVENT, - BLUETOOTH_EVENT_LE_DISCOVERY_STARTED, - param); + BLUETOOTH_EVENT_LE_DISCOVERY_STARTED, + param); } else { - ret_if(le_scan_event_id > 0); + if (le_scan_event_id > 0) + continue; adapter_proxy = _bt_get_adapter_proxy(); - ret_if(adapter_proxy == NULL); + if (adapter_proxy == NULL) + continue; /* Need to stop searching */ ret = g_dbus_proxy_call_sync(adapter_proxy, "StopLEDiscovery", - NULL, - G_DBUS_CALL_FLAGS_NONE, - DBUS_TIMEOUT, NULL, - &err); + NULL, + G_DBUS_CALL_FLAGS_NONE, + DBUS_TIMEOUT, NULL, + &err); if (err) { BT_ERR("Dbus Error %s", err->message); g_clear_error(&err); @@ -676,25 +684,23 @@ static void __bt_adapter_property_changed_event(GVariant *msg, const char *path) le_scan_event_id = g_timeout_add(BT_DISCOVERY_FINISHED_DELAY, (GSourceFunc)__bt_le_discovery_finished_cb, NULL); - } + } } else if (strcasecmp(property, "Name") == 0) { char *name = NULL; - g_variant_get(val, "s", &name); + g_variant_get(val, "&s", &name); param = g_variant_new("(is)", result, name); /* Send event to application */ _bt_send_event(BT_ADAPTER_EVENT, BLUETOOTH_EVENT_LOCAL_NAME_CHANGED, param); - g_free(name); } else if (strcasecmp(property, "Alias") == 0) { char *alias = NULL; - g_variant_get(val, "s", &alias); + g_variant_get(val, "&s", &alias); param = g_variant_new("(is)", result, alias); /* Send event to application */ _bt_send_event(BT_ADAPTER_EVENT, BLUETOOTH_EVENT_LOCAL_NAME_CHANGED, param); - g_free(alias); } else if (strcasecmp(property, "Discoverable") == 0) { gboolean discoverable = FALSE; @@ -705,7 +711,8 @@ static void __bt_adapter_property_changed_event(GVariant *msg, const char *path) if (_bt_get_discoverable_timeout_property() > 0) { int time = 0; adapter_proxy = _bt_get_adapter_properties_proxy(); - ret_if(adapter_proxy == NULL); + if (adapter_proxy == NULL) + continue; ret = g_dbus_proxy_call_sync(adapter_proxy, "Set", g_variant_new("(ssv)", BT_ADAPTER_INTERFACE, "DiscoverableTimeout", @@ -734,11 +741,8 @@ static void __bt_adapter_property_changed_event(GVariant *msg, const char *path) _bt_get_discoverable_mode(&mode); /* Event will be sent by "DiscoverableTimeout" signal */ - if (mode != BLUETOOTH_DISCOVERABLE_MODE_GENERAL_DISCOVERABLE) { - g_free(property); - g_variant_unref(val); - return; - } + if (mode != BLUETOOTH_DISCOVERABLE_MODE_GENERAL_DISCOVERABLE) + continue; /* Send event to application */ BT_INFO("[General Discoverable]"); @@ -752,11 +756,8 @@ static void __bt_adapter_property_changed_event(GVariant *msg, const char *path) /* Event was already sent by "Discoverable" signal */ if (mode == BLUETOOTH_DISCOVERABLE_MODE_CONNECTABLE || - mode == BLUETOOTH_DISCOVERABLE_MODE_GENERAL_DISCOVERABLE) { - g_free(property); - g_variant_unref(val); - return; - } + mode == BLUETOOTH_DISCOVERABLE_MODE_GENERAL_DISCOVERABLE) + continue; /* Send event to application */ BT_INFO("[Limited Discoverable (Timeout %u secs)]", @@ -812,18 +813,17 @@ static void __bt_adapter_property_changed_event(GVariant *msg, const char *path) char *name = NULL; char *value = NULL; GVariantIter *iter = NULL; - g_variant_get(val, "as", &iter); - ret_if(iter == NULL); + g_variant_get(val, "as", &iter); + if (iter == NULL) + continue; - while (g_variant_iter_loop(iter, "s", &name)) { - BT_DBG("name = %s", name); - g_variant_iter_loop(iter, "s", &value); - BT_DBG("Value = %s", value); - if (FALSE == _bt_update_le_feature_support(name, value)) - BT_INFO("Fail to update LE feature info"); + while (g_variant_iter_next(iter, "&s", &name) && + g_variant_iter_next(iter, "&s", &value)) { + BT_DBG("name = %s, Value = %s", name, value); + if (!_bt_update_le_feature_support(name, value)) + BT_ERR("Failed to update LE feature (name = %s, value = %s)", name, value); } - g_variant_iter_free(iter); } else if (strcasecmp(property, "IpspInitStateChanged") == 0) { gboolean ipsp_initialized = FALSE; @@ -837,7 +837,7 @@ static void __bt_adapter_property_changed_event(GVariant *msg, const char *path) BLUETOOTH_EVENT_IPSP_INIT_STATE_CHANGED, param); } else { - BT_DBG("property : [%s]", property); + BT_DBG("Unhandled property : [%s]", property); } } }