summaryrefslogtreecommitdiffstats
path: root/src/responder/common/responder_dp.c
diff options
context:
space:
mode:
authorSimo Sorce <simo@redhat.com>2012-03-07 18:05:06 -0500
committerStephen Gallagher <sgallagh@redhat.com>2012-03-08 08:09:56 -0500
commit65976ea5e9767bfaced81dfb97dc87d59f50b57e (patch)
treedd26f9d109a837f698133f2a218f6269e31d0fb9 /src/responder/common/responder_dp.c
parentbd72b3510105599b5bdaf00c203df1164b304238 (diff)
downloadsssd_unused-65976ea5e9767bfaced81dfb97dc87d59f50b57e.tar.gz
sssd_unused-65976ea5e9767bfaced81dfb97dc87d59f50b57e.tar.xz
sssd_unused-65976ea5e9767bfaced81dfb97dc87d59f50b57e.zip
Use the correct hash table for pending requests
The function that handled pending requests on reconnect was checking an orphaned global variable that was never used, redenring the whole function uselsess. This fixes a very nasty bug that was causing requests for which we never received an answer for (for example because the backend failed and was restarted) to be never removed and therefore causing a black hole effect for any other request of the same type. Fixes: https://fedorahosted.org/sssd/ticket/1229
Diffstat (limited to 'src/responder/common/responder_dp.c')
-rw-r--r--src/responder/common/responder_dp.c9
1 files changed, 4 insertions, 5 deletions
diff --git a/src/responder/common/responder_dp.c b/src/responder/common/responder_dp.c
index a116fedd..a54c68d7 100644
--- a/src/responder/common/responder_dp.c
+++ b/src/responder/common/responder_dp.c
@@ -28,8 +28,6 @@
#include "providers/data_provider.h"
#include "sbus/sbus_client.h"
-hash_table_t *dp_requests = NULL;
-
struct sss_dp_req;
struct sss_dp_callback {
@@ -120,19 +118,19 @@ static int sss_dp_req_destructor(void *ptr)
return 0;
}
-void handle_requests_after_reconnect(void)
+void handle_requests_after_reconnect(struct resp_ctx *rctx)
{
int ret;
hash_value_t *values;
unsigned long count, i;
struct sss_dp_req *sdp_req;
- if (!dp_requests) {
+ if (!rctx->dp_request_table) {
DEBUG(7, ("No requests to handle after reconnect\n"));
return;
}
- ret = hash_values(dp_requests, &count, &values);
+ ret = hash_values(rctx->dp_request_table, &count, &values);
if (ret != HASH_SUCCESS) {
DEBUG(1, ("hash_values failed, "
"not all request might be handled after reconnect.\n"));
@@ -145,6 +143,7 @@ void handle_requests_after_reconnect(void)
talloc_free(sdp_req);
}
}
+
static int sss_dp_get_reply(DBusPendingCall *pending,
dbus_uint16_t *dp_err,
dbus_uint32_t *dp_ret,