Hello community, here is the log from the commit of package xorgxrdp for openSUSE:Factory checked in at 2019-06-13 23:06:23 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/xorgxrdp (Old) and /work/SRC/openSUSE:Factory/.xorgxrdp.new.4811 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "xorgxrdp" Thu Jun 13 23:06:23 2019 rev:12 rq:709675 version:0.2.10 Changes: -------- --- /work/SRC/openSUSE:Factory/xorgxrdp/xorgxrdp.changes 2019-05-02 19:16:54.505372899 +0200 +++ /work/SRC/openSUSE:Factory/.xorgxrdp.new.4811/xorgxrdp.changes 2019-06-13 23:06:23.323192841 +0200 @@ -1,0 +2,8 @@ +Thu Jun 13 06:36:56 UTC 2019 - Felix Zhang <fezh...@suse.com> + +- Update to version 0.2.10 + + Improve reliability killing disconnected sessions + + Introduce suppress output support (requires upcoming xrdp + v0.9.11) + +------------------------------------------------------------------- Old: ---- xorgxrdp-0.2.9.tar.gz xorgxrdp-0.2.9.tar.gz.asc New: ---- xorgxrdp-0.2.10.tar.gz xorgxrdp-0.2.10.tar.gz.asc ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ xorgxrdp.spec ++++++ --- /var/tmp/diff_new_pack.hy7e9X/_old 2019-06-13 23:06:23.883192510 +0200 +++ /var/tmp/diff_new_pack.hy7e9X/_new 2019-06-13 23:06:23.887192508 +0200 @@ -17,7 +17,7 @@ Name: xorgxrdp -Version: 0.2.9 +Version: 0.2.10 Release: 0 Summary: Xorg drivers for xrdp License: X11 ++++++ xorgxrdp-0.2.9.tar.gz -> xorgxrdp-0.2.10.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xorgxrdp-0.2.9/README.md new/xorgxrdp-0.2.10/README.md --- old/xorgxrdp-0.2.9/README.md 2018-12-12 02:16:54.000000000 +0100 +++ new/xorgxrdp-0.2.10/README.md 2019-05-30 08:05:34.000000000 +0200 @@ -1,6 +1,6 @@ [](https://travis-ci.org/neutrinolabs/xorgxrdp) -*Current Version:* 0.2.9 +*Current Version:* 0.2.10 # xorgxrdp diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xorgxrdp-0.2.9/configure new/xorgxrdp-0.2.10/configure --- old/xorgxrdp-0.2.9/configure 2018-12-12 02:21:10.000000000 +0100 +++ new/xorgxrdp-0.2.10/configure 2019-05-30 08:06:20.000000000 +0200 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for xorgxrdp 0.2.9. +# Generated by GNU Autoconf 2.69 for xorgxrdp 0.2.10. # # Report bugs to <xrdp-de...@googlegroups.com>. # @@ -590,8 +590,8 @@ # Identity of this package. PACKAGE_NAME='xorgxrdp' PACKAGE_TARNAME='xorgxrdp' -PACKAGE_VERSION='0.2.9' -PACKAGE_STRING='xorgxrdp 0.2.9' +PACKAGE_VERSION='0.2.10' +PACKAGE_STRING='xorgxrdp 0.2.10' PACKAGE_BUGREPORT='xrdp-de...@googlegroups.com' PACKAGE_URL='' @@ -1338,7 +1338,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures xorgxrdp 0.2.9 to adapt to many kinds of systems. +\`configure' configures xorgxrdp 0.2.10 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1408,7 +1408,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of xorgxrdp 0.2.9:";; + short | recursive ) echo "Configuration of xorgxrdp 0.2.10:";; esac cat <<\_ACEOF @@ -1532,7 +1532,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -xorgxrdp configure 0.2.9 +xorgxrdp configure 0.2.10 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -1810,7 +1810,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by xorgxrdp $as_me 0.2.9, which was +It was created by xorgxrdp $as_me 0.2.10, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2684,7 +2684,7 @@ # Define the identity of the package. PACKAGE='xorgxrdp' - VERSION='0.2.9' + VERSION='0.2.10' cat >>confdefs.h <<_ACEOF @@ -13533,7 +13533,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by xorgxrdp $as_me 0.2.9, which was +This file was extended by xorgxrdp $as_me 0.2.10, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -13599,7 +13599,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -xorgxrdp config.status 0.2.9 +xorgxrdp config.status 0.2.10 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xorgxrdp-0.2.9/configure.ac new/xorgxrdp-0.2.10/configure.ac --- old/xorgxrdp-0.2.9/configure.ac 2018-12-12 02:16:54.000000000 +0100 +++ new/xorgxrdp-0.2.10/configure.ac 2019-05-30 08:05:34.000000000 +0200 @@ -2,7 +2,7 @@ AC_PREREQ(2.65) # package version must be x.y.z -AC_INIT([xorgxrdp], [0.2.9], [xrdp-de...@googlegroups.com]) +AC_INIT([xorgxrdp], [0.2.10], [xrdp-de...@googlegroups.com]) package_version_major=$(echo ${PACKAGE_VERSION}|cut -d. -f1) package_version_minor=$(echo ${PACKAGE_VERSION}|cut -d. -f2) package_version_patchlevel=$(echo ${PACKAGE_VERSION}|cut -d. -f3) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xorgxrdp-0.2.9/module/rdp.h new/xorgxrdp-0.2.10/module/rdp.h --- old/xorgxrdp-0.2.9/module/rdp.h 2018-12-11 06:56:02.000000000 +0100 +++ new/xorgxrdp-0.2.10/module/rdp.h 2019-05-30 04:27:34.000000000 +0200 @@ -282,11 +282,11 @@ OsTimerPtr disconnectTimer; int disconnect_timeout_s; - int disconnect_time_ms; + CARD32 disconnect_time_ms; OsTimerPtr idleDisconnectTimer; int idle_disconnect_timeout_s; - time_t last_event_time; + CARD32 last_event_time_ms; int conNumber; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xorgxrdp-0.2.9/module/rdpClientCon.c new/xorgxrdp-0.2.10/module/rdpClientCon.c --- old/xorgxrdp-0.2.9/module/rdpClientCon.c 2018-12-11 06:56:02.000000000 +0100 +++ new/xorgxrdp-0.2.10/module/rdpClientCon.c 2019-05-30 04:27:34.000000000 +0200 @@ -210,7 +210,7 @@ LLOGLN(0, ("rdpClientConGotConnection:")); clientCon = g_new0(rdpClientCon, 1); clientCon->dev = dev; - dev->last_event_time = time(0); + dev->last_event_time_ms = GetTimeInMillis(); dev->do_dirty_ons = 1; make_stream(clientCon->in_s); @@ -253,7 +253,7 @@ { LLOGLN(0, ("rdpClientConGetConnection: " "engaging idle timer, timeout [%d] sec", dev->idle_disconnect_timeout_s)); - dev->idleDisconnectTimer = TimerSet(dev->idleDisconnectTimer, 0, 1000 * 1, + dev->idleDisconnectTimer = TimerSet(dev->idleDisconnectTimer, 0, dev->idle_disconnect_timeout_s * 1000, rdpDeferredIdleDisconnectCallback, dev); } else @@ -274,7 +274,6 @@ static CARD32 rdpDeferredDisconnectCallback(OsTimerPtr timer, CARD32 now, pointer arg) { - CARD32 lnow_ms; rdpPtr dev; dev = (rdpPtr) arg; @@ -297,8 +296,7 @@ { LLOGLN(10, ("rdpDeferredDisconnectCallback: not connected")); } - lnow_ms = GetTimeInMillis(); - if (lnow_ms - dev->disconnect_time_ms > dev->disconnect_timeout_s * 1000) + if (now - dev->disconnect_time_ms > dev->disconnect_timeout_s * 1000) { LLOGLN(0, ("rdpDeferredDisconnectCallback: " "disconnect timeout exceeded, exiting")); @@ -317,26 +315,16 @@ LLOGLN(10, ("rdpDeferredIdleDisconnectCallback:")); rdpPtr dev; - time_t current_time; dev = (rdpPtr) arg; - current_time = time(0); - if (dev->idle_disconnect_timeout_s <= 0) - { - /* should not reach here */ - LLOGLN(0, ("rdpDeferredIdleDisconnectCallback: timeout set to non-positive value, disengaging timer")); - goto cancel_timer; - } + CARD32 millis_since_last_event; - if (dev->last_event_time > now) - { - LLOGLN(0, ("rdpDeferredIdleDisconnectCallback: time has gone backwards, resetting")); - dev->last_event_time = current_time; - goto next_timer; - } + /* how many millis was the last event ago? */ + millis_since_last_event = now - dev->last_event_time_ms; - if (current_time - dev->last_event_time > dev->idle_disconnect_timeout_s) + /* we MUST compare to equal otherwise we could restart the idle timer with 0! */ + if (millis_since_last_event >= (dev->idle_disconnect_timeout_s * 1000)) { LLOGLN(0, ("rdpDeferredIdleDisconnectCallback: session has been idle for %d seconds, disconnecting", dev->idle_disconnect_timeout_s)); @@ -348,20 +336,18 @@ } LLOGLN(0, ("rdpDeferredIdleDisconnectCallback: disconnected idle session")); - goto cancel_timer; + + TimerCancel(dev->idleDisconnectTimer); + TimerFree(dev->idleDisconnectTimer); + dev->idleDisconnectTimer = NULL; + LLOGLN(0, ("rdpDeferredIdleDisconnectCallback: idle timer disengaged")); + return 0; } -next_timer: - dev->idleDisconnectTimer = TimerSet(dev->idleDisconnectTimer, 0, 1000 * 1, + /* restart the idle timer with last_event + idle timeout */ + dev->idleDisconnectTimer = TimerSet(dev->idleDisconnectTimer, 0, (dev->idle_disconnect_timeout_s * 1000) - millis_since_last_event, rdpDeferredIdleDisconnectCallback, dev); return 0; - -cancel_timer: - TimerCancel(dev->idleDisconnectTimer); - TimerFree(dev->idleDisconnectTimer); - dev->idleDisconnectTimer = NULL; - LLOGLN(0, ("rdpDeferredIdleDisconnectCallback: idle timer disengaged")); - return 0; } /*****************************************************************************/ static int @@ -1077,6 +1063,35 @@ /******************************************************************************/ static int +rdpClientConProcessMsgClientSuppressOutput(rdpPtr dev, rdpClientCon *clientCon) +{ + int suppress; + int left; + int top; + int right; + int bottom; + struct stream *s; + + s = clientCon->in_s; + in_uint32_le(s, suppress); + in_uint32_le(s, left); + in_uint32_le(s, top); + in_uint32_le(s, right); + in_uint32_le(s, bottom); + LLOGLN(10, ("rdpClientConProcessMsgClientSuppressOutput: " + "suppress %d left %d top %d right %d bottom %d", + suppress, left, top, right, bottom)); + clientCon->suppress_output = suppress; + if (suppress == 0) + { + rdpClientConAddDirtyScreen(dev, clientCon, left, top, + right - left, bottom - top); + } + return 0; +} + +/******************************************************************************/ +static int rdpClientConProcessMsg(rdpPtr dev, rdpClientCon *clientCon) { int msg_type; @@ -1100,7 +1115,12 @@ case 106: /* client region ex */ rdpClientConProcessMsgClientRegionEx(dev, clientCon); break; + case 108: /* client suppress output */ + rdpClientConProcessMsgClientSuppressOutput(dev, clientCon); + break; default: + LLOGLN(0, ("rdpClientConProcessMsg: unknown msg_type %d", + msg_type)); break; } @@ -2397,7 +2417,12 @@ LLOGLN(10, ("rdpDeferredUpdateCallback:")); clientCon = (rdpClientCon *) arg; - + clientCon->updateScheduled = FALSE; + if (clientCon->suppress_output) + { + LLOGLN(10, ("rdpDeferredUpdateCallback: suppress_output set")); + return 0; + } if ((clientCon->rect_id > clientCon->rect_id_ack) || /* do not allow captures until we have the client_info */ clientCon->client_info.size == 0) @@ -2408,6 +2433,7 @@ clientCon->updateTimer = TimerSet(clientCon->updateTimer, 0, 40, rdpDeferredUpdateCallback, clientCon); + clientCon->updateScheduled = TRUE; return 0; } else @@ -2419,7 +2445,6 @@ "rdp_Bpp %d screen width %d screen height %d", clientCon->rdp_width, clientCon->rdp_height, clientCon->rdp_Bpp, id.width, id.height)); - clientCon->updateScheduled = FALSE; if (clientCon->dev->monitorCount < 1) { dirty_extents = *rdpRegionExtents(clientCon->dirtyRegion); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xorgxrdp-0.2.9/module/rdpClientCon.h new/xorgxrdp-0.2.10/module/rdpClientCon.h --- old/xorgxrdp-0.2.9/module/rdpClientCon.h 2018-12-11 06:56:02.000000000 +0100 +++ new/xorgxrdp-0.2.10/module/rdpClientCon.h 2019-05-30 04:27:34.000000000 +0200 @@ -112,6 +112,9 @@ int num_rfx_crcs_alloc; int *rfx_crcs; + /* true = skip drawing */ + int suppress_output; + struct _rdpClientCon *next; struct _rdpClientCon *prev; }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xorgxrdp-0.2.9/module/rdpCursor.c new/xorgxrdp-0.2.10/module/rdpCursor.c --- old/xorgxrdp-0.2.9/module/rdpCursor.c 2017-08-09 06:45:44.000000000 +0200 +++ new/xorgxrdp-0.2.10/module/rdpCursor.c 2019-05-30 04:27:34.000000000 +0200 @@ -245,7 +245,11 @@ int bpp; LLOGLN(10, ("rdpSpriteSetCursorCon:")); - + if (clientCon->suppress_output) + { + LLOGLN(10, ("rdpSpriteSetCursorCon: suppress_output set")); + return; + } w = pCurs->bits->width; h = pCurs->bits->height; if ((pCurs->bits->argb != 0) && diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xorgxrdp-0.2.9/module/rdpInput.c new/xorgxrdp-0.2.10/module/rdpInput.c --- old/xorgxrdp-0.2.9/module/rdpInput.c 2018-12-11 06:56:02.000000000 +0100 +++ new/xorgxrdp-0.2.10/module/rdpInput.c 2019-05-30 04:27:34.000000000 +0200 @@ -98,7 +98,7 @@ long param1, long param2, long param3, long param4) { - dev->last_event_time = time(0); + dev->last_event_time_ms = GetTimeInMillis(); if (g_input_proc[0].proc != 0) { @@ -113,7 +113,7 @@ long param1, long param2, long param3, long param4) { - dev->last_event_time = time(0); + dev->last_event_time_ms = GetTimeInMillis(); if (g_input_proc[1].proc != 0) {