diff options
author | Simo Sorce <ssorce@redhat.com> | 2009-09-25 11:08:22 -0400 |
---|---|---|
committer | Stephen Gallagher <sgallagh@redhat.com> | 2009-09-25 12:58:47 -0400 |
commit | 039ccb42e498a92f877a3e91cada515ce08926fb (patch) | |
tree | 47bf8d2f95b114f6af19eb535162eb3c634ba3c4 | |
parent | 9e821019e8db89e0f3c408f1c6eb583f89f26a88 (diff) | |
download | sssd-039ccb42e498a92f877a3e91cada515ce08926fb.tar.gz sssd-039ccb42e498a92f877a3e91cada515ce08926fb.tar.bz2 sssd-039ccb42e498a92f877a3e91cada515ce08926fb.zip |
Let backend respond while fetching large results
Timers always come before fd events, wait 5 microseconds between processing
operations so that tevent has a chance of cactching an fd event in between.
This allows the backend to reply to pings even while processing very large ldap
results (importanty especially during the first enumeration).
-rw-r--r-- | server/providers/ldap/sdap_async.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/server/providers/ldap/sdap_async.c b/server/providers/ldap/sdap_async.c index 6ab88679..16511748 100644 --- a/server/providers/ldap/sdap_async.c +++ b/server/providers/ldap/sdap_async.c @@ -298,7 +298,7 @@ static void sdap_process_message(struct tevent_context *ev, static void sdap_unlock_next_reply(struct sdap_op *op) { - struct timeval no_timeout = {0, 0}; + struct timeval tv; struct tevent_timer *te; struct sdap_msg *next_reply; @@ -311,7 +311,16 @@ static void sdap_unlock_next_reply(struct sdap_op *op) /* if there are still replies to parse, queue a new operation */ if (op->list) { - te = tevent_add_timer(op->ev, op, no_timeout, + /* use a very small timeout, so that fd operations have a chance to be + * served while processing a long reply */ + tv = tevent_timeval_current(); + + /* wait 5 microsecond */ + tv.tv_usec += 5; + tv.tv_sec += tv.tv_usec / 1000000; + tv.tv_usec = tv.tv_usec % 1000000; + + te = tevent_add_timer(op->ev, op, tv, sdap_process_next_reply, op); if (!te) { DEBUG(1, ("Failed to add critical timer for next reply!\n")); |