Hello community, here is the log from the commit of package xorgxrdp for openSUSE:Factory checked in at 2019-10-14 12:43:58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/xorgxrdp (Old) and /work/SRC/openSUSE:Factory/.xorgxrdp.new.2352 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "xorgxrdp" Mon Oct 14 12:43:58 2019 rev:14 rq:738208 version:0.2.11 Mon Oct 14 12:43:20 2019 rev:13 rq:738172 version:0.2.11 Changes: -------- --- /work/SRC/openSUSE:Factory/xorgxrdp/xorgxrdp.changes 2019-06-13 23:06:23.323192841 +0200 +++ /work/SRC/openSUSE:Factory/.xorgxrdp.new.2352/xorgxrdp.changes 2019-10-14 12:44:08.298286616 +0200 @@ -1,0 +2,12 @@ +Sat Oct 12 10:43:24 UTC 2019 - Felix Zhang <[email protected]> + +- Update to version 0.2.11 (jsc#9612) + + Fix crash on reconnect when monitors change #121 #147 + +------------------------------------------------------------------- +Sat Oct 12 10:43:24 UTC 2019 - Felix Zhang <[email protected]> + +- Update to version 0.2.11 (jsc#SLE-9612) + + Fix crash on reconnect when monitors change #121 #147 + +------------------------------------------------------------------- Old: ---- xorgxrdp-0.2.10.tar.gz xorgxrdp-0.2.10.tar.gz.asc New: ---- xorgxrdp-0.2.11.tar.gz xorgxrdp-0.2.11.tar.gz.asc ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ xorgxrdp.spec ++++++ --- /var/tmp/diff_new_pack.OMuGn1/_old 2019-10-14 12:44:09.206284241 +0200 +++ /var/tmp/diff_new_pack.OMuGn1/_new 2019-10-14 12:44:09.206284241 +0200 @@ -17,7 +17,7 @@ Name: xorgxrdp -Version: 0.2.10 +Version: 0.2.11 Release: 0 Summary: Xorg drivers for xrdp License: X11 ++++++ xorgxrdp-0.2.10.tar.gz -> xorgxrdp-0.2.11.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xorgxrdp-0.2.10/README.md new/xorgxrdp-0.2.11/README.md --- old/xorgxrdp-0.2.10/README.md 2019-05-30 08:05:34.000000000 +0200 +++ new/xorgxrdp-0.2.11/README.md 2019-08-16 03:14:04.000000000 +0200 @@ -1,6 +1,6 @@ [](https://travis-ci.org/neutrinolabs/xorgxrdp) -*Current Version:* 0.2.10 +*Current Version:* 0.2.11 # xorgxrdp diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xorgxrdp-0.2.10/configure new/xorgxrdp-0.2.11/configure --- old/xorgxrdp-0.2.10/configure 2019-05-30 08:06:20.000000000 +0200 +++ new/xorgxrdp-0.2.11/configure 2019-08-16 03:15:33.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.10. +# Generated by GNU Autoconf 2.69 for xorgxrdp 0.2.11. # # Report bugs to <[email protected]>. # @@ -590,8 +590,8 @@ # Identity of this package. PACKAGE_NAME='xorgxrdp' PACKAGE_TARNAME='xorgxrdp' -PACKAGE_VERSION='0.2.10' -PACKAGE_STRING='xorgxrdp 0.2.10' +PACKAGE_VERSION='0.2.11' +PACKAGE_STRING='xorgxrdp 0.2.11' PACKAGE_BUGREPORT='[email protected]' 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.10 to adapt to many kinds of systems. +\`configure' configures xorgxrdp 0.2.11 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.10:";; + short | recursive ) echo "Configuration of xorgxrdp 0.2.11:";; 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.10 +xorgxrdp configure 0.2.11 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.10, which was +It was created by xorgxrdp $as_me 0.2.11, 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.10' + VERSION='0.2.11' 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.10, which was +This file was extended by xorgxrdp $as_me 0.2.11, 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.10 +xorgxrdp config.status 0.2.11 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.10/configure.ac new/xorgxrdp-0.2.11/configure.ac --- old/xorgxrdp-0.2.10/configure.ac 2019-05-30 08:05:34.000000000 +0200 +++ new/xorgxrdp-0.2.11/configure.ac 2019-08-16 03:14:04.000000000 +0200 @@ -2,7 +2,7 @@ AC_PREREQ(2.65) # package version must be x.y.z -AC_INIT([xorgxrdp], [0.2.10], [[email protected]]) +AC_INIT([xorgxrdp], [0.2.11], [[email protected]]) 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.10/module/rdp.h new/xorgxrdp-0.2.11/module/rdp.h --- old/xorgxrdp-0.2.10/module/rdp.h 2019-05-30 04:27:34.000000000 +0200 +++ new/xorgxrdp-0.2.11/module/rdp.h 2019-08-16 03:14:04.000000000 +0200 @@ -305,9 +305,6 @@ copy_box_dst2_proc a8r8g8b8_to_nv12_box; /* multimon */ - int extra_outputs; - RRCrtcPtr crtc[16]; - RROutputPtr output[16]; struct monitor_info minfo[16]; /* client monitor data */ int doMultimon; int monitorCount; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xorgxrdp-0.2.10/module/rdpRandR.c new/xorgxrdp-0.2.11/module/rdpRandR.c --- old/xorgxrdp-0.2.10/module/rdpRandR.c 2018-12-11 06:18:41.000000000 +0100 +++ new/xorgxrdp-0.2.11/module/rdpRandR.c 2019-08-16 03:14:04.000000000 +0200 @@ -378,25 +378,20 @@ LLOGLN(0, ("rdpRRAddOutput: RROutputSetConnection failed")); } RRCrtcNotify(crtc, mode, x, y, RR_Rotate_0, NULL, 1, &output); - - dev->output[dev->extra_outputs] = output; - dev->crtc[dev->extra_outputs] = crtc; - dev->extra_outputs++; - return output; } /******************************************************************************/ static RROutputPtr -rdpRRUpdateOutput(rdpPtr dev, int x, int y, int width, int height, int index) +rdpRRUpdateOutput(RROutputPtr output, RRCrtcPtr crtc, + int x, int y, int width, int height) { RRModePtr mode; - RRCrtcPtr crtc; - RROutputPtr output; xRRModeInfo modeInfo; char name[64]; const int vfreq = 50; + LLOGLN(0, ("rdpRRUpdateOutput:")); sprintf (name, "%dx%d", width, height); memset (&modeInfo, 0, sizeof(modeInfo)); modeInfo.width = width; @@ -408,15 +403,13 @@ mode = RRModeGet(&modeInfo, name); if (mode == 0) { - LLOGLN(0, ("rdpRRAddOutput: RRModeGet failed")); + LLOGLN(0, ("rdpRRUpdateOutput: RRModeGet failed")); return 0; } - output = dev->output[index]; if (!RROutputSetModes(output, &mode, 1, 0)) { - LLOGLN(0, ("rdpRRAddOutput: RROutputSetModes failed")); + LLOGLN(0, ("rdpRRUpdateOutput: RROutputSetModes failed")); } - crtc = dev->crtc[index]; RRCrtcNotify(crtc, mode, x, y, RR_Rotate_0, NULL, 1, &output); RROutputChanged(output, 1); return output; @@ -446,6 +439,27 @@ } /******************************************************************************/ +static int +rdpRRRemoveExtra(rrScrPrivPtr pRRScrPriv, int count) +{ + int index; + + while (pRRScrPriv->numCrtcs > count) + { + index = pRRScrPriv->numCrtcs - 1; + RRCrtcDestroy(pRRScrPriv->crtcs[index]); + pRRScrPriv->crtcs[index] = NULL; + } + while (pRRScrPriv->numOutputs > count) + { + index = pRRScrPriv->numOutputs - 1; + RROutputDestroy(pRRScrPriv->outputs[index]); + pRRScrPriv->outputs[index] = NULL; + } + return 0; +} + +/******************************************************************************/ int rdpRRSetRdpOutputs(rdpPtr dev) { @@ -459,8 +473,8 @@ RROutputPtr output; pRRScrPriv = rrGetScrPriv(dev->pScreen); - LLOGLN(0, ("rdpRRSetRdpOutputs: numCrtcs %d monitorCount %d", - pRRScrPriv->numCrtcs, dev->monitorCount)); + LLOGLN(0, ("rdpRRSetRdpOutputs: numCrtcs %d numOutputs %d monitorCount %d", + pRRScrPriv->numCrtcs, pRRScrPriv->numOutputs, dev->monitorCount)); if (dev->monitorCount <= 0) { left = 0; @@ -473,8 +487,9 @@ LLOGLN(0, ("rdpRRSetRdpOutputs: update output %d " "left %d top %d width %d height %d", 0, left, top, width, height)); - output = rdpRRUpdateOutput(dev, - left, top, width, height, 0); + output = rdpRRUpdateOutput(pRRScrPriv->outputs[0], + pRRScrPriv->crtcs[0], + left, top, width, height); } else { @@ -486,15 +501,13 @@ output = rdpRRAddOutput(dev, text, left, top, width, height); } - /* remove any entra */ - for (index = pRRScrPriv->numCrtcs; index > 1; index--) - { - RRCrtcDestroy(pRRScrPriv->crtcs[index - 1]); - } - for (index = pRRScrPriv->numOutputs; index > 1; index--) + if (output == NULL) { - RROutputDestroy(pRRScrPriv->outputs[index - 1]); + LLOGLN(0, ("rdpRRSetRdpOutputs: rdpRRUpdateOutput failed")); + return 1; } + /* remove any entra */ + rdpRRRemoveExtra(pRRScrPriv, 1); } else { @@ -510,8 +523,9 @@ LLOGLN(0, ("rdpRRSetRdpOutputs: update output %d " "left %d top %d width %d height %d", index, left, top, width, height)); - output = rdpRRUpdateOutput(dev, - left, top, width, height, index); + output = rdpRRUpdateOutput(pRRScrPriv->outputs[index], + pRRScrPriv->crtcs[index], + left, top, width, height); } else { @@ -527,16 +541,14 @@ { RRSetPrimaryOutput(pRRScrPriv, output); } + if (output == NULL) + { + LLOGLN(0, ("rdpRRSetRdpOutputs: rdpRRUpdateOutput failed")); + return 1; + } } /* remove any entra */ - for (index = pRRScrPriv->numCrtcs; index > dev->monitorCount; index--) - { - RRCrtcDestroy(pRRScrPriv->crtcs[index - 1]); - } - for (index = pRRScrPriv->numOutputs; index > dev->monitorCount; index--) - { - RROutputDestroy(pRRScrPriv->outputs[index - 1]); - } + rdpRRRemoveExtra(pRRScrPriv, dev->monitorCount); } return 0; }
