diff options
author | Jaehyun Kim <jeik01.kim@samsung.com> | 2021-09-27 06:47:38 +0000 |
---|---|---|
committer | Gerrit Code Review <gerrit@review> | 2021-09-27 06:47:38 +0000 |
commit | f2074eea6e8ead5bde4d712f0707cf6a3e025fb8 (patch) | |
tree | 64c4ec22d157d25003543db47d1215619911ad78 | |
parent | 3a8dc46a144e3902729553ced331a2dc0d8140fa (diff) | |
parent | f99d5c1915b4f361421f36c77643595497c61473 (diff) | |
download | connman-f2074eea6e8ead5bde4d712f0707cf6a3e025fb8.tar.gz connman-f2074eea6e8ead5bde4d712f0707cf6a3e025fb8.tar.bz2 connman-f2074eea6e8ead5bde4d712f0707cf6a3e025fb8.zip |
Merge "Reply all multiple/simultaenous SetDevicePower method call" into tizentizen_6.5.m2_releasesubmit/tizen_6.5/20211028.163301submit/tizen/20210928.013804accepted/tizen/unified/20210928.073034accepted/tizen/6.5/unified/20211028.225128
-rwxr-xr-x | src/device.c | 63 |
1 files changed, 46 insertions, 17 deletions
diff --git a/src/device.c b/src/device.c index d0825ce2..377ef47e 100755 --- a/src/device.c +++ b/src/device.c @@ -76,7 +76,10 @@ struct connman_device { time_t last_user_selection_time; char *last_user_selection_ident; char *last_connected_ident; - DBusMessage *pending_reply; + GList *pending_reply_list; /* List of DBusMessage* for async reply to multiple + * device power dbus calls, which are made before + * connman_device_set_powered(). + */ int max_scan_ssids; bool is_5_0_ghz_supported; unsigned int mac_policy; @@ -85,12 +88,21 @@ struct connman_device { #endif }; +#if defined TIZEN_EXT +static void __clear_pending_trigger(gpointer data, gpointer user_data) +{ + DBusMessage *msg = (DBusMessage *)data; + dbus_message_unref(msg); +} +#endif + static void clear_pending_trigger(struct connman_device *device) { #if defined TIZEN_EXT - if (device->pending_reply) { - dbus_message_unref(device->pending_reply); - device->pending_reply = NULL; + if (device->pending_reply_list) { + g_list_foreach(device->pending_reply_list, __clear_pending_trigger, NULL); + g_list_free(device->pending_reply_list); + device->pending_reply_list = NULL; } #endif if (device->pending_timeout > 0) { @@ -200,6 +212,20 @@ static bool device_has_service_type(struct connman_device *device, return service_type == device_service_type; } +#if defined TIZEN_EXT +static void __device_pending_reset(gpointer data, gpointer user_data) +{ + DBusMessage *msg = (DBusMessage *)data; + DBusMessage *reply; + + reply = __connman_error_failed(msg, ETIMEDOUT); + if (reply) + g_dbus_send_message(connection, reply); + + dbus_message_unref(msg); +} +#endif + static gboolean device_pending_reset(gpointer user_data) { struct connman_device *device = user_data; @@ -210,13 +236,10 @@ static gboolean device_pending_reset(gpointer user_data) DBusMessage *reply; /* Power request timed out, send ETIMEDOUT. */ - if (device->pending_reply) { - reply = __connman_error_failed(device->pending_reply, ETIMEDOUT); - if (reply) - g_dbus_send_message(connection, reply); - - dbus_message_unref(device->pending_reply); - device->pending_reply = NULL; + if (device->pending_reply_list) { + g_list_foreach(device->pending_reply_list, __device_pending_reset, NULL); + g_list_free(device->pending_reply_list); + device->pending_reply_list = NULL; } #endif /* Power request timedout, reset power pending state. */ @@ -506,13 +529,19 @@ static void device_send_changed(const char *ifname, enum connman_service_type ty dbus_message_unref(signal); } +static void __device_send_reply(gpointer data, gpointer user_data) +{ + DBusMessage *msg = (DBusMessage *)data; + g_dbus_send_reply(connection, msg, DBUS_TYPE_INVALID); + dbus_message_unref(msg); +} + static void device_send_reply(struct connman_device *device) { - if (device->pending_reply) { - g_dbus_send_reply(connection, - device->pending_reply, DBUS_TYPE_INVALID); - dbus_message_unref(device->pending_reply); - device->pending_reply = NULL; + if (device->pending_reply_list) { + g_list_foreach(device->pending_reply_list, __device_send_reply, NULL); + g_list_free(device->pending_reply_list); + device->pending_reply_list = NULL; } } #endif @@ -1220,7 +1249,7 @@ struct connman_network *connman_device_get_default_network( void connman_device_set_pending_reply(struct connman_device *device, DBusMessage *msg) { - device->pending_reply = dbus_message_ref(msg); + device->pending_reply_list = g_list_prepend(device->pending_reply_list, dbus_message_ref(msg)); } void connman_device_send_connected_signal(struct connman_device *device, |