xserver: Branch 'master'

Keith Packard keithp at kemper.freedesktop.org
Thu Oct 4 14:58:25 PDT 2012


 os/io.c |    5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

New commits:
commit d5bf6f95f31037bd49b11348b500c3c13b7e0c99
Author: Keith Packard <keithp at keithp.com>
Date:   Thu Oct 4 14:42:37 2012 -0700

    Fix FlushClient to write extraBuf when provided (regression fix)
    
    In commit:
    
    	commit 092c57ab173c8b71056f6feb3b9d04d063a46579
    	Author: Adam Jackson <ajax at 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 at fooishbar.org>
    	    Signed-off-by: Adam Jackson <ajax at 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 at keithp.com>
    Reviewed-by: Julien Cristau <jcristau at debian.org>

diff --git a/os/io.c b/os/io.c
index 015f137..5c3aceb 100644
--- a/os/io.c
+++ b/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 */


More information about the xorg-commit mailing list