A failed service that is reconnected has to be set to idle state before
connecting it again. Changing state from failed to idle also has to be
allowed. Unless this is done, a service already in failed state won't
be able to detect that a subsequent reconnect also must re-trigger
a new reconnect attempt in __connman_service_ipconfig_indicate_state()
and service_indicate_state().

Fixes CM-622
---
 src/service.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/src/service.c b/src/service.c
index 0108fab..6a42d48 100644
--- a/src/service.c
+++ b/src/service.c
@@ -5683,9 +5683,6 @@ int __connman_service_ipconfig_indicate_state(struct 
connman_service *service,
        switch (new_state) {
        case CONNMAN_SERVICE_STATE_UNKNOWN:
        case CONNMAN_SERVICE_STATE_IDLE:
-               if (service->state == CONNMAN_SERVICE_STATE_FAILURE)
-                       return -EINVAL;
-               break;
        case CONNMAN_SERVICE_STATE_ASSOCIATION:
                break;
        case CONNMAN_SERVICE_STATE_CONFIGURATION:
@@ -5954,6 +5951,8 @@ int __connman_service_connect(struct connman_service 
*service,
        if (!is_ipconfig_usable(service))
                return -ENOLINK;
 
+       __connman_service_clear_error(service);
+
        err = service_connect(service);
 
        service->connect_reason = reason;
-- 
1.9.1

_______________________________________________
connman mailing list
[email protected]
https://lists.connman.net/mailman/listinfo/connman

Reply via email to