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 @@
 [![Build 
Status](https://travis-ci.org/neutrinolabs/xorgxrdp.svg?branch=devel)](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)
     {


Reply via email to