On Tue, Nov 01, 2011 at 14:14:54 +0100, Michal Privoznik wrote: > If daemon is using SASL it reads client data into a cache. This cache is > big (usually 65KB) and can thus contain 2 or more messages. However, > on socket event we can dispatch only one message. So if we read two > messages at once, the second will not be dispatched as the socket event > goes away with filling the cache. > Moreover, when dispatching the cache we need to remember to take care > of client max requests limit. > --- > src/rpc/virnetserverclient.c | 34 +++++++++++++++++++++++++++++++++- > 1 files changed, 33 insertions(+), 1 deletions(-) > > diff --git a/src/rpc/virnetserverclient.c b/src/rpc/virnetserverclient.c > index 1256f0f..69af746 100644 > --- a/src/rpc/virnetserverclient.c > +++ b/src/rpc/virnetserverclient.c ... > @@ -204,6 +220,19 @@ static void virNetServerClientUpdateEvent(virNetServerClientPtr client) > mode = virNetServerClientCalculateHandleMode(client); > > virNetSocketUpdateIOCallback(client->sock, mode); > +#ifdef HAVE_SASL > + if (client->nrequests < client->nrequests_max && > + client->rx && > + virNetSocketHasCachedData(client->sock)) { > + if (client->sasl_timer) > + virEventUpdateTimeout(client->sasl_timer, 0); > + else > + client->sasl_timer = virEventAddTimeout(0, > + virNetServerClientDispatchReadTimerFunc, > + client, > + NULL); > + } > +#endif Is it all really SASL-only? I think we should remove all the ifdefs (and rename sasl_timer to something like cached_timer) to enable the code everytime virNetSocketHasCachedData returns true. The thing that SASL is currently the only layer that caches data (which may not even be true, I haven't checked), it may change in the future, e.g., when adding libssh2 transport. Jirka -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list