Fix FlushClient to write extraBuf when provided (regression fix)
In commit:
commit 092c57ab17
Author: Adam Jackson <ajax@redhat.com>
Date: Fri Jun 17 14:03:01 2011 -0400
os: Hide the Connection{In,Out}put implementation details
Reviewed-by: Daniel Stone <daniel@fooishbar.org>
Signed-off-by: Adam Jackson <ajax@redhat.com>
the check for an empty output buffer was moved from one calling
location into the FlushClient implementation itself. However, this
neglected the possibility that additional data, in the form of
'extraBuf' would be passed to FlushClient from other code paths. If the
output buffer happened to be empty at that time, the extra data would
never be written to the client.
This is fixed by checking the total data to be written, which includes
both pending and extra data, instead of just the pending data.
Signed-off-by: Keith Packard <keithp@keithp.com>
Reviewed-by: Julien Cristau <jcristau@debian.org>
This commit is contained in:
parent
8367dd9736
commit
d5bf6f95f3
5
os/io.c
5
os/io.c
|
@ -862,11 +862,14 @@ FlushClient(ClientPtr who, OsCommPtr oc, const void *__extraBuf, int extraCount)
|
|||
long notWritten;
|
||||
long todo;
|
||||
|
||||
if (!oco || !oco->count)
|
||||
if (!oco)
|
||||
return 0;
|
||||
written = 0;
|
||||
padsize = padding_for_int32(extraCount);
|
||||
notWritten = oco->count + extraCount + padsize;
|
||||
if (!notWritten)
|
||||
return 0;
|
||||
|
||||
todo = notWritten;
|
||||
while (notWritten) {
|
||||
long before = written; /* amount of whole thing written */
|
||||
|
|
Loading…
Reference in New Issue
Block a user