Only disconnect the specific service if asked for it
[connman] / src / service.c
index 951c9d6..789cc9d 100644 (file)
@@ -292,6 +292,9 @@ static gboolean connect_timeout(gpointer user_data)
 
        service->timeout = 0;
 
+       if (service->network != NULL)
+               __connman_network_disconnect(service->network);
+
        if (service->pending != NULL) {
                DBusMessage *reply;
 
@@ -409,12 +412,17 @@ static DBusMessage *remove_service(DBusConnection *conn,
        if (service->type == CONNMAN_SERVICE_TYPE_ETHERNET)
                return __connman_error_not_supported(msg);
 
+       if (service->favorite == FALSE)
+               return __connman_error_not_supported(msg);
+
        if (service->network != NULL) {
-               int err;
+               struct connman_device *device;
 
-               err = __connman_network_disconnect(service->network);
-               if (err < 0 && err != -EINPROGRESS)
-                       return __connman_error_failed(msg, -err);
+               device = connman_network_get_device(service->network);
+               if (device != NULL)
+                       __connman_device_disconnect(device);
+
+               __connman_network_disconnect(service->network);
        }
 
        connman_service_set_favorite(service, FALSE);