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 /server/providers | |
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).
Diffstat (limited to 'server/providers')
-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")); |