Control and Target retries counter were reset when service state goes from CONNECTED to DISCONNECTED, but usually an extra DISCONNECTING state is reach before going to DISCONNECTED. This causes retry counter to not being reset in this case, leading to service not being able to initialize on next connection. HS retry counter was only reset when limit is reached. Reset the counter as soon as CONNECTED state is reached to avoid that. --- plugins/policy.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/plugins/policy.c b/plugins/policy.c index 0e533ba1f..02ce16f67 100644 --- a/plugins/policy.c +++ b/plugins/policy.c @@ -383,6 +383,7 @@ static void hs_cb(struct btd_service *service, btd_service_state_t old_state, else if (btd_service_get_state(sink) != BTD_SERVICE_STATE_CONNECTED) policy_set_sink_timer(data); + data->hs_retries = 0; break; case BTD_SERVICE_STATE_DISCONNECTING: break; @@ -537,8 +538,6 @@ static void controller_cb(struct btd_service *service, timeout_remove(data->ct_timer); data->ct_timer = 0; } - } else if (old_state == BTD_SERVICE_STATE_CONNECTED) { - data->ct_retries = 0; } break; case BTD_SERVICE_STATE_CONNECTING: @@ -548,6 +547,7 @@ static void controller_cb(struct btd_service *service, timeout_remove(data->ct_timer); data->ct_timer = 0; } + data->ct_retries = 0; break; case BTD_SERVICE_STATE_DISCONNECTING: break; @@ -587,8 +587,6 @@ static void target_cb(struct btd_service *service, timeout_remove(data->tg_timer); data->tg_timer = 0; } - } else if (old_state == BTD_SERVICE_STATE_CONNECTED) { - data->tg_retries = 0; } break; case BTD_SERVICE_STATE_CONNECTING: @@ -598,6 +596,7 @@ static void target_cb(struct btd_service *service, timeout_remove(data->tg_timer); data->tg_timer = 0; } + data->tg_retries = 0; break; case BTD_SERVICE_STATE_DISCONNECTING: break; -- 2.40.0