1. 19 Mar, 2017 5 commits
    • Keith Packard's avatar
      Xserver/os/io.c: Bail out early from FlushClient if nothing needs to be written. · af7c3750
      Keith Packard authored
       Found in X.org commit:
      
       commit d5bf6f95f31037bd49b11348b500c3c13b7e0c99
       Author: Keith Packard <keithp@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@redhat.com>
              Date:   Fri Jun 17 14:03:01 2011 -0400
      
                  os: Hide the Connection{In,Out}put implementation details
      Reviewed-by: 's avatarDaniel Stone <daniel@fooishbar.org>
      Signed-off-by: 's avatarAdam 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: 's avatarKeith Packard <keithp@keithp.com>
      Reviewed-by: 's avatarJulien Cristau <jcristau@debian.org>
      Backported-to-NX-by: 's avatarMike Gabriel <mike.gabriel@das-netzwerkteam.de>
      af7c3750
    • Chris Wilson's avatar
      os: Immediately queue initial WriteToClient · 645b757d
      Chris Wilson authored
       Backported from X.org:
      
       commit 9bf46610a9d20962854016032de4567974e87957
       Author: Chris Wilson <chris@chris-wilson.co.uk>
       Date:   Fri Jun 21 22:58:31 2013 +0100
      
          os: Immediately queue initial WriteToClient
      
          If we immediately put the WriteToClient() buffer into the socket's write
          queue, not only do we benefit from sending the response back to client
          earlier, but we also avoid the overhead of copying the data into our own
          staging buffer and causing extra work in the next select(). The write is
          effectively free as typically we may only send one reply per client per
          select() call, so the cost of the FlushClient() is the same.
      
          shmget10:   26400 -> 110000
          getimage10: 25000 -> 108000
      
          shmget500:   3160 -> 13500
          getimage500: 1000 -> 1010
      
          The knock-on effect is that on a mostly idle composited desktop, the CPU
          overhead is dominated by the memmove in WriteToClient, which is in turn
          eliminated by this patch.
      Reviewed-by: 's avatarAdam Jackson <ajax@redhat.com>
      Signed-off-by: 's avatarChris Wilson <chris@chris-wilson.co.uk>
      Backported-to-NX-by: 's avatarMike Gabriel <mike.gabriel@das-netzwerkteam.de>
      645b757d
    • Mike Gabriel's avatar
      os/xdmcp: Remove dead 'restart' code · 07464670
      Mike Gabriel authored
       Completing the below X.org commit:
      
       commit a3a40291330bad10401fe2bcdbc097ce742b026a
       Author: Keith Packard <keithp@keithp.com>
       Date:   Mon Sep 21 07:16:16 2015 +0100
      
          os/xdmcp: Remove dead 'restart' code
      
          The X server used to wait for the user to hit a key or move the mouse
          before restarting the session after a keepalive failure. This,
          presumably, was to avoid having the X server continuously spew XDMCP
          protocol on the network while the XDM server was dead.
      
          Switching into this state was removed from the server some time before
          XFree86 4.3.99.16, so the remaining bits of code have been dead for
          over a decade, and no-one ever noticed.
      Reviewed-by: 's avatarAdam Jackson <ajax@redhat.com>
      Signed-off-by: 's avatarKeith Packard <keithp@keithp.com>
      Backported-to-NX-by: 's avatarMike Gabriel <mike.gabriel@das-netzwerkteam.de>
      07464670
    • Mike Gabriel's avatar
      b7c389b9
    • Ulrich Sibiller's avatar
      Keystroke.c: ignore CapsLock and NumLock most of the time · 7065e0bf
      Ulrich Sibiller authored
      CapsLock and NumLock will only be taken into account for keystrokes
      that explicitly require them. This is implemented for convenience and
      fixes ArcticaProject/nx-libs#397
      7065e0bf
  2. 17 Mar, 2017 5 commits
  3. 15 Mar, 2017 3 commits
    • Keith Packard's avatar
      os: Add NotifyFd interfaces · 86110d6e
      Keith Packard authored
       Backported from X.org:
      
       commit 0c41b7af4ab0c8d22b88f201293f59524d1e7317
       Author: Keith Packard <keithp@keithp.com>
       Date:   Wed Nov 11 22:02:02 2015 -0800
      
          os: Add NotifyFd interfaces
      
          This provides a callback-based interface to monitor file
          descriptors beyond the usual client and device interfaces.
      
          Modules within the server using file descriptors for reading and/or
          writing can call
      
              Bool SetNotifyFd(int fd, NotifyFdProcPtr notify_fd, int mask, void *data);
      
          mask can be any combination of X_NOTIFY_READ and X_NOTIFY_WRITE.
      
          When 'fd' becomes readable or writable, the notify_fd function will be
          called with the 'fd', the ready conditions and 'data' values as arguments,
      
          When the module no longer needs to monitor the fd, it will call
      
              void RemoveNotifyFd(int fd);
      
          RemoveNotifyFd may be called from the notify function.
      Reviewed-by: 's avatarAdam Jackson <ajax@redhat.com>
      Signed-off-by: 's avatarKeith Packard <keithp@keithp.com>
      Backported-to-NX-by: 's avatarMike Gabriel <mike.gabriel@das-netzwerkteam.de>
      86110d6e
    • Mike Gabriel's avatar
    • Keith Packard's avatar
      os/xdmcp: Just send XDMCP keepalive packets once every three minute · 9f000842
      Keith Packard authored
       Backported from X.org:
      
       commit db1089eafc1c5371fa0030202de588d2e2b4f8e5
       Author: Keith Packard <keithp@keithp.com>
       Date:   Mon Sep 21 07:16:17 2015 +0100
      
          os/xdmcp: Just send XDMCP keepalive packets once every three minutes
      
          There was a complicated scheme to increase the time between keepalives
          from 3 minutes up to as much as 24 hours in an attempt to reduce
          network traffic from idle X terminals. X terminals receiving X
          traffic, or receiving user input would use the 3 minute value; X
          terminals without any network traffic would use a longer value.
      
          However, this was actually broken -- any activity in the X server,
          either client requests or user input, would end up resetting the
          keepalive timeout, so a user mashing on the keyboard would never
          discover that the XDMCP master had disappeared and have the session
          terminated, which was precisely the design goal of the XDMCP keepalive
          mechanism.
      
          Instead of attempting to fix this, accept the cost of a pair of XDMCP
          packets once every three minutes and just perform keepalives
          regularly.
      
          This will also make reworking the block and wakeup handler APIs to
          eliminate select masks easier.
      Reviewed-by: 's avatarAdam Jackson <ajax@redhat.com>
      Signed-off-by: 's avatarKeith Packard <keithp@keithp.com>
      Backported-to-NX-by: 's avatarMike Gabriel <mike.gabriel@das-netzwerkteam.de>
      9f000842
  4. 13 Mar, 2017 27 commits