diff options
author | Jakub Hrozek <jhrozek@redhat.com> | 2012-03-07 17:08:52 +0100 |
---|---|---|
committer | Jan Zeleny <jzeleny@redhat.com> | 2012-03-08 10:58:15 +0100 |
commit | 606d2d03833903f00d40f9810d4dccd04a752e76 (patch) | |
tree | 41fc8ff0f0fb69aeea5b2cd425d515e219c5f259 /src/providers/data_provider_fo.c | |
parent | 9729b24935f9b717234728b2d2cfb4ca49df307b (diff) | |
download | sssd-606d2d03833903f00d40f9810d4dccd04a752e76.tar.gz sssd-606d2d03833903f00d40f9810d4dccd04a752e76.tar.xz sssd-606d2d03833903f00d40f9810d4dccd04a752e76.zip |
Detect cycle in the fail over on subsequent resolve requests only
Diffstat (limited to 'src/providers/data_provider_fo.c')
-rw-r--r-- | src/providers/data_provider_fo.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/src/providers/data_provider_fo.c b/src/providers/data_provider_fo.c index c358e68d1..51d6ae211 100644 --- a/src/providers/data_provider_fo.c +++ b/src/providers/data_provider_fo.c @@ -342,6 +342,7 @@ struct be_resolve_server_state { int attempts; struct fo_server *srv; + bool first_try; }; static void be_resolve_server_done(struct tevent_req *subreq); @@ -349,7 +350,8 @@ static void be_resolve_server_done(struct tevent_req *subreq); struct tevent_req *be_resolve_server_send(TALLOC_CTX *memctx, struct tevent_context *ev, struct be_ctx *ctx, - const char *service_name) + const char *service_name, + bool first_try) { struct tevent_req *req, *subreq; struct be_resolve_server_state *state; @@ -370,6 +372,7 @@ struct tevent_req *be_resolve_server_send(TALLOC_CTX *memctx, state->svc = svc; state->attempts = 0; + state->first_try = first_try; subreq = fo_resolve_service_send(state, ev, ctx->be_fo->resolv, @@ -443,7 +446,7 @@ static void be_resolve_server_done(struct tevent_req *subreq) } /* all fine we got the server */ - if (state->svc->first_resolved == NULL) { + if (state->svc->first_resolved == NULL || state->first_try == true) { DEBUG(SSSDBG_TRACE_LIBS, ("Saving the first resolved server\n")); state->svc->first_resolved = state->srv; } else if (state->svc->first_resolved == state->srv) { |