diff options
author | Jakub Hrozek <jhrozek@redhat.com> | 2012-01-05 20:23:04 +0100 |
---|---|---|
committer | Stephen Gallagher <sgallagh@redhat.com> | 2012-02-05 19:16:16 -0500 |
commit | 98076cabc2a8b8f71dc3bc1263519827f71a5fcc (patch) | |
tree | 86af86db1d547be63bf72c3471b23fb6f0a96286 /src/responder/nss/nsssrv_services.c | |
parent | 5708dc97b69a468f077616d7a75e81f4172f63fa (diff) | |
download | sssd-98076cabc2a8b8f71dc3bc1263519827f71a5fcc.tar.gz sssd-98076cabc2a8b8f71dc3bc1263519827f71a5fcc.tar.xz sssd-98076cabc2a8b8f71dc3bc1263519827f71a5fcc.zip |
RESPONDERS: Refactor setent_req_list
Makes the setent_add_ref() and setent_notify_*() functions more generic
to be reusable by the autofs responder.
Diffstat (limited to 'src/responder/nss/nsssrv_services.c')
-rw-r--r-- | src/responder/nss/nsssrv_services.c | 27 |
1 files changed, 6 insertions, 21 deletions
diff --git a/src/responder/nss/nsssrv_services.c b/src/responder/nss/nsssrv_services.c index da37708b4..3ce3d0902 100644 --- a/src/responder/nss/nsssrv_services.c +++ b/src/responder/nss/nsssrv_services.c @@ -1215,7 +1215,7 @@ setservent_send(TALLOC_CTX *mem_ctx, struct cli_ctx *cctx) * Register for notification when it's * ready. */ - ret = setent_add_ref(state, state->nctx->svcctx, req); + ret = nss_setent_add_ref(state, state->nctx->svcctx, req); if (ret != EOK) goto immediate; } return req; @@ -1252,7 +1252,10 @@ setservent_send(TALLOC_CTX *mem_ctx, struct cli_ctx *cctx) } /* Add a callback reference for ourselves */ - setent_add_ref(state, state->nctx->svcctx, req); + ret = nss_setent_add_ref(state, state->nctx->svcctx, req); + if (ret != EOK) { + goto immediate; + } /* ok, start the searches */ step_ctx = talloc_zero(state->getent_ctx, struct setent_step_ctx); @@ -1510,7 +1513,6 @@ setservent_finalize(struct setent_step_ctx *step_ctx) struct resp_ctx *rctx = step_ctx->rctx; struct timeval tv; struct tevent_timer *te; - struct setent_req_list *reql; /* We've finished all our lookups * The result object is now safe to read. @@ -1530,24 +1532,7 @@ setservent_finalize(struct setent_step_ctx *step_ctx) "Entries may become stale.\n")); } - /* Notify the waiting clients */ - while ((reql = nctx->svcctx->reqs)) { - /* Each tevent_req_done() call will free - * the request, removing it from the list. - */ - tevent_req_done(reql->req); - - if (reql == nctx->svcctx->reqs) { - /* The consumer failed to free the - * request. Log a bug and continue. - */ - DEBUG(SSSDBG_FATAL_FAILURE, - ("BUG: a callback did not free its request. " - "May leak memory\n")); - /* Skip to the next since a memory leak is non-fatal */ - nctx->svcctx->reqs = nctx->svcctx->reqs->next; - } - } + nss_setent_notify_done(nctx->svcctx); } static void |