From: Seungyoun Ju Date: Fri, 6 Jul 2018 09:06:40 +0000 (+0900) Subject: Fix : Some properties of adapter couldn't be handled X-Git-Tag: submit/tizen/20180710.070923~1 X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fconnectivity%2Fbluetooth-frwk.git;a=commitdiff_plain;h=955465e2d51a909f00dcf49b2abb1366fe775906 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: I23043706ef888d5594e70a64792b91bbd7b36747 --- diff --git a/bt-service/bt-service-event-receiver.c b/bt-service/bt-service-event-receiver.c index aa15764..09ec54a 100644 --- a/bt-service/bt-service-event-receiver.c +++ b/bt-service/bt-service-event-receiver.c @@ -484,8 +484,6 @@ void _bt_handle_adapter_event(GVariant *msg, const char *member) /* Bonding from remote device */ address = g_malloc0(BT_ADDRESS_STRING_SIZE); - if (address == NULL) - return; g_variant_get(msg, "(&o)", &object_path); @@ -628,11 +626,12 @@ static void __bt_adapter_property_changed_event(GVariant *msg, const char *path) gboolean discovering = FALSE; if (_bt_adapter_get_status() != BT_ACTIVATED) - return; + continue; g_variant_get(val, "b", &discovering); - /* Send event to application */ BT_DBG("Discovering %d", discovering); + + /* Send event to application */ if (discovering == TRUE) { _bt_set_discovery_status(TRUE); param = g_variant_new("(i)", result); @@ -640,10 +639,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", @@ -666,9 +667,11 @@ static void __bt_adapter_property_changed_event(GVariant *msg, const char *path) if (_bt_adapter_get_status() != BT_ACTIVATED || _bt_adapter_get_le_status() != BT_LE_ACTIVATED) - return; + continue; g_variant_get(val, "b", &le_discovering); + BT_DBG("LEDiscovering %d", le_discovering); + /* Send event to application */ if (le_discovering == TRUE) { _bt_set_le_scan_status(TRUE); @@ -677,10 +680,12 @@ static void __bt_adapter_property_changed_event(GVariant *msg, const char *path) BLUETOOTH_EVENT_LE_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, "StopLEDiscovery", @@ -700,22 +705,20 @@ static void __bt_adapter_property_changed_event(GVariant *msg, const char *path) } } 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; @@ -724,20 +727,23 @@ static void __bt_adapter_property_changed_event(GVariant *msg, const char *path) if (discoverable == FALSE) { if (_bt_get_discoverable_timeout_property() > 0) { - int time = 0; + unsigned 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", - g_variant_new("i", time)), + g_variant_new("u", time)), G_DBUS_CALL_FLAGS_NONE, DBUS_TIMEOUT, NULL, &err); if (err != NULL) { - BT_ERR("StopLEDiscovery Failed: %s", err->message); - g_error_free(err); + BT_ERR("Set DiscoverableTimeout Failed: %s", err->message); + g_clear_error(&err); } if (ret) g_variant_unref(ret); @@ -746,7 +752,7 @@ static void __bt_adapter_property_changed_event(GVariant *msg, const char *path) mode = BLUETOOTH_DISCOVERABLE_MODE_CONNECTABLE; /* Send event to application */ - BT_INFO("[Connectable]"); + BT_INFO("[Non Discoverable]"); param = g_variant_new("(in)", result, mode); _bt_send_event(BT_ADAPTER_EVENT, BLUETOOTH_EVENT_DISCOVERABLE_MODE_CHANGED, @@ -773,11 +779,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)]", @@ -834,16 +837,18 @@ 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); - 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"); + if (iter == NULL) + continue; + + 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); } - if (iter) - g_variant_iter_free(iter); + g_variant_iter_free(iter); } else if (strcasecmp(property, "IpspInitStateChanged") == 0) { gboolean ipsp_initialized = FALSE; @@ -856,7 +861,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); } } }