From 72d48d112776257aeac08749208dff7f92ca7641 Mon Sep 17 00:00:00 2001
From: Ondrej Kos <okos@redhat.com>
Date: Mon, 5 Aug 2013 12:39:04 +0200
Subject: [PATCH 2/5] DP: Store list of back-end tevent requests

---
 src/providers/data_provider_be.c | 25 +++++++++++++++++++++++++
 src/providers/dp_backend.h       |  3 +++
 2 files changed, 28 insertions(+)

diff --git a/src/providers/data_provider_be.c b/src/providers/data_provider_be.c
index 912b4191c0f6984babf96bb8073db6c01b48afbf..a80bfa136068e593f8afdd5a4b3e52a363a54463 100644
--- a/src/providers/data_provider_be.c
+++ b/src/providers/data_provider_be.c
@@ -125,6 +125,8 @@ static struct bet_data bet_data[] = {
 #define REQ_PHASE_SELINUX 1
 
 struct be_req {
+    struct be_req *prev;
+    struct be_req *next;
     struct be_client *becli;
     struct be_ctx *be_ctx;
     void *req_data;
@@ -166,10 +168,25 @@ void *be_req_get_data(struct be_req *be_req)
     return be_req->req_data;
 }
 
+struct sss_domain_info *be_req_get_domain(struct be_req *be_req)
+{
+    struct be_ctx *be_ctx = be_req_get_be_ctx(be_req);
+
+    return be_ctx ? be_ctx->domain : NULL;
+}
+
 void be_req_terminate(struct be_req *be_req,
                       int dp_err_type, int errnum, const char *errstr)
 {
+    struct be_ctx *be_ctx = NULL;
+
     if (be_req->fn == NULL) return;
+
+    be_ctx = be_req_get_be_ctx(be_req);
+    if (be_ctx == NULL) return;
+
+    DLIST_REMOVE(be_ctx->be_reqlist, be_req);
+
     be_req->fn(be_req, dp_err_type, errnum, errstr);
 }
 
@@ -274,6 +291,7 @@ static errno_t be_file_request(TALLOC_CTX *mem_ctx,
                                be_req_fn_t fn)
 {
     errno_t ret;
+    struct be_ctx *be_ctx = NULL;
     struct be_async_req *areq;
     struct tevent_timer *te;
     struct timeval tv;
@@ -300,6 +318,13 @@ static errno_t be_file_request(TALLOC_CTX *mem_ctx,
         return EIO;
     }
 
+    be_ctx = be_req_get_be_ctx(be_req);
+    if (be_ctx == NULL) {
+        return EINVAL;
+    }
+
+    DLIST_ADD(be_ctx->be_reqlist, be_req);
+
     return EOK;
 }
 
diff --git a/src/providers/dp_backend.h b/src/providers/dp_backend.h
index 76590a39ef1aa4af5e54254828980e52d31368e2..ff36015fbc139288d4d1fcea465037b49a80164e 100644
--- a/src/providers/dp_backend.h
+++ b/src/providers/dp_backend.h
@@ -145,6 +145,9 @@ struct be_ctx {
     struct be_refresh_ctx *refresh_ctx;
 
     size_t check_online_ref_count;
+
+    struct be_req *be_reqlist;
+
 };
 
 struct bet_ops {
-- 
1.8.1.4

