summaryrefslogtreecommitdiff
path: root/plugins/vpn.c
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/vpn.c')
-rw-r--r--plugins/vpn.c30
1 files changed, 14 insertions, 16 deletions
diff --git a/plugins/vpn.c b/plugins/vpn.c
index 65a4853d..2f3d8607 100644
--- a/plugins/vpn.c
+++ b/plugins/vpn.c
@@ -1243,8 +1243,8 @@ static int create_configuration(DBusMessage *msg, connection_ready_cb callback)
data = g_hash_table_lookup(vpn_connections, ident);
if (data != NULL) {
- if (data->call != NULL) {
- connman_error("Dbus call already pending");
+ if (data->call != NULL || data->cb_data != NULL) {
+ DBG("create configuration call already pending");
err = -EINPROGRESS;
goto done;
}
@@ -1274,6 +1274,18 @@ static int create_configuration(DBusMessage *msg, connection_ready_cb callback)
dbus_message_set_sender(new_msg, me);
dbus_message_set_member(new_msg, "Create");
+ user_data = g_try_new0(struct config_create_data, 1);
+ if (user_data == NULL) {
+ err = -ENOMEM;
+ goto done;
+ }
+
+ user_data->callback = callback;
+ user_data->message = dbus_message_ref(msg);
+ user_data->path = NULL;
+
+ DBG("cb %p msg %p", user_data, msg);
+
result = dbus_connection_send_with_reply(connection, new_msg,
&call, DBUS_TIMEOUT);
if (result == FALSE || call == NULL) {
@@ -1281,20 +1293,6 @@ static int create_configuration(DBusMessage *msg, connection_ready_cb callback)
goto done;
}
- if (data->cb_data == NULL) {
- user_data = g_try_new(struct config_create_data, 1);
- if (user_data != NULL) {
- user_data->callback = callback;
- user_data->message = dbus_message_ref(msg);
- user_data->path = NULL;
-
- DBG("cb %p msg %p", user_data, msg);
- }
- } else {
- DBG("Configuration callback data already pending, "
- "discarding new data.");
- }
-
dbus_pending_call_set_notify(call, configuration_create_reply,
user_data, NULL);
data->call = call;