diff options
author | Sumit Bose <sbose@redhat.com> | 2010-05-18 11:11:52 +0200 |
---|---|---|
committer | Stephen Gallagher <sgallagh@redhat.com> | 2010-05-27 14:44:13 -0400 |
commit | 6f5472ad13a013bacd66d2f32a5addfe535239f3 (patch) | |
tree | 24a66523adda45ca7cd278204224828e4b2fe1ba /src | |
parent | d3e7cadfc9a09d6e3f7ae1f7f33c7dddd0bb1661 (diff) | |
download | sssd-6f5472ad13a013bacd66d2f32a5addfe535239f3.tar.gz sssd-6f5472ad13a013bacd66d2f32a5addfe535239f3.tar.bz2 sssd-6f5472ad13a013bacd66d2f32a5addfe535239f3.zip |
Add run_callbacks flag
Diffstat (limited to 'src')
-rw-r--r-- | src/providers/data_provider_fo.c | 25 | ||||
-rw-r--r-- | src/providers/dp_backend.h | 2 |
2 files changed, 25 insertions, 2 deletions
diff --git a/src/providers/data_provider_fo.c b/src/providers/data_provider_fo.c index 14ebbdb5..56a072ae 100644 --- a/src/providers/data_provider_fo.c +++ b/src/providers/data_provider_fo.c @@ -42,6 +42,7 @@ struct be_svc_data { struct fo_service *fo_service; struct fo_server *last_good_srv; + bool run_callbacks; struct be_svc_callback *callbacks; }; @@ -414,9 +415,11 @@ static void be_resolve_server_done(struct tevent_req *subreq) fo_get_server_name(state->srv), ipaddr)); } - /* now call all svc callbacks if server changed */ - if (state->srv != state->svc->last_good_srv) { + /* now call all svc callbacks if server changed or if it is explicitly + * requested */ + if (state->srv != state->svc->last_good_srv || state->svc->run_callbacks) { state->svc->last_good_srv = state->srv; + state->svc->run_callbacks = false; DLIST_FOR_EACH(callback, state->svc->callbacks) { callback->fn(callback->private_data, state->srv); @@ -440,3 +443,21 @@ int be_resolve_server_recv(struct tevent_req *req, struct fo_server **srv) return EOK; } +int be_fo_run_callbacks_at_next_request(struct be_ctx *ctx, + const char *service_name) +{ + struct be_svc_data *svc; + + DLIST_FOR_EACH(svc, ctx->be_fo->svcs) { + if (strcmp(svc->name, service_name) == 0) { + break; + } + } + if (NULL == svc) { + return ENOENT; + } + + svc->run_callbacks = true; + + return EOK; +} diff --git a/src/providers/dp_backend.h b/src/providers/dp_backend.h index fc5e558c..0668859b 100644 --- a/src/providers/dp_backend.h +++ b/src/providers/dp_backend.h @@ -177,4 +177,6 @@ struct tevent_req *be_resolve_server_send(TALLOC_CTX *memctx, const char *service_name); int be_resolve_server_recv(struct tevent_req *req, struct fo_server **srv); +int be_fo_run_callbacks_at_next_request(struct be_ctx *ctx, + const char *service_name); #endif /* __DP_BACKEND_H___ */ |