Commit Graph

15241 Commits

Author SHA1 Message Date
Adam Jackson 93d4224ccf xserver 1.18.2
Signed-off-by: Adam Jackson <ajax@redhat.com>
2016-03-11 16:38:52 -05:00
Adam Jackson d88f8ffeb7 vidmode: Remove stray vidmodeproc.h from EXTRA_DIST
Was removed from the tree in:

    commit f175cf45ae
    Author: Olivier Fourdan <ofourdan@redhat.com>
    Date:   Wed Feb 10 09:34:34 2016 +0100

        vidmode: move to a separate library of its own

but not removed from the Makefile, which broke 'make dist'.

Signed-off-by: Adam Jackson <ajax@redhat.com>
(cherry picked from commit 744c292ae4)
2016-03-11 13:51:59 -05:00
Dave Airlie 643359fb03 present: fail flipping if we have any slave outputs
Due to the way present currently works, we don't ever check with the
secondary adapters if we can flip at all.

We shouldn't flip if the secondary adapters are attached to the pixmap
currently, however using the current check_flip callback isn't possible
as it passes the Window to the driver (something we shouldn't be doing),
so the slave driver can never get it's own screen ptr back.

For now to fix the problem just block flips if we have any slaves
configured. We can fix the ABI up later, but this fix can be backported
to stable.

Signed-off-by: Dave Airlie <airlied@redhat.com>
Reviewed-by: Keith Packard <keithp@keithp.com>
(cherry picked from commit 47bc7fcaa5)
2016-03-11 13:37:10 -05:00
Adam Jackson 3e480c6f51 glx: Implement GLX_EXT_fbconfig_packed_float
The tokens for this are already defined by GLX_ARB_fbconfig_float, which
we already support, so just add the extension to the list and let the
driver provide those configs if it wants.

Reviewed-by: Eric Anholt <eric@anholt.net>
Signed-off-by: Adam Jackson <ajax@redhat.com>
(cherry picked from commit ef3005da3d)
2016-03-11 13:14:34 -05:00
Adam Jackson b9f7edda06 glx: Implement GLX_EXT_stereo_tree
This is correct as it is, but only because we know no DRI drivers
implement stereo.

v2: Use new ATTRIB macro

Reviewed-by: James Jones <jajones@nvidia.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
Signed-off-by: Adam Jackson <ajax@redhat.com>
(cherry picked from commit d15cb654b6)
2016-03-11 13:14:34 -05:00
Adam Jackson 2b3363418a glx: Add GLX_SCREEN to the GetDrawableAttributes response
libglvnd would like to use this to map from drawable to screen, so it
can know which driver to dispatch to. Refer to the spec proposal here:

https://lists.freedesktop.org/archives/mesa-dev/2016-March/109543.html

Reviewed-by: Eric Anholt <eric@anholt.net>
Signed-off-by: Adam Jackson <ajax@redhat.com>
(cherry picked from commit a18238877b)
2016-03-11 13:14:34 -05:00
Adam Jackson 2541d765fd glx: Macroize building the attribute list in DoGetDrawableAttributes
No functional change, just a little easier to read and harder to get
wrong.

Reviewed-by: Eric Anholt <eric@anholt.net>
Signed-off-by: Adam Jackson <ajax@redhat.com>
(cherry picked from commit 47c1d6b7ab)
2016-03-11 13:14:34 -05:00
Eric Anholt 2a7b6ea1a5 ephyr: Fix redisplay with glamor on GLES.
glamor_transfer.c is still totally broken, though.

Reviewed-by: Adam Jackson <ajax@redhat.com>
Signed-off-by: Eric Anholt <eric@anholt.net>
(cherry picked from commit c01094c531)
2016-03-11 13:14:34 -05:00
Olivier Fourdan 5af20f1563 glamor: do not build Xv support when --disable-xv
Reviewed-by: Adam Jackson <ajax@redhat.com>
Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
(cherry picked from commit 25ce263fd8)
2016-03-11 13:14:34 -05:00
Olivier Fourdan 9fc05b85e5 xwayland: add glamor Xv adaptor
This adds an Xv adaptor using glamor.

Reviewed-by: Adam Jackson <ajax@redhat.com>
Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
(cherry picked from commit da7724d3d2)
2016-03-11 13:14:34 -05:00
Michel Dänzer 1aa9a2be31 modesetting: Allow CRTC transforms to actually take effect
Setting crtc->transformPresent to FALSE was preventing the transform
from actually taking effect and putting RandR into a confused state.

Now that the RandR 1.2 cursor code handles transforms correctly, we can
allow them to properly take effect.

Reviewed-by: Keith Packard <keithp@keithp.com>
(cherry picked from commit 24042b4e36)
2016-03-11 13:14:33 -05:00
Michel Dänzer aa8770bf54 xfree86: Re-set current cursor after RandR 1.2 CRTC configuration change
Add xf86CursorResetCursor, which allows switching between HW and SW
cursor depending on the current state.

Call it from xf86DisableUnusedFunctions, which is called after any CRTC
configuration change such as setting a mode or disabling a CRTC. This
makes sure that SW cursor is used e.g. while a transform is in use on
any CRTC or while there are active PRIME output slaves, and enables HW
cursor again once none of those conditions are true anymore.

Reviewed-by: Keith Packard <keithp@keithp.com>
(cherry picked from commit b04767c84d)
2016-03-11 13:14:33 -05:00
Michel Dänzer 870d4e2e6b xfree86/modes: Check for CRTC transforms in xf86_use_hw_cursor(_argb) (v2)
We currently don't handle transforms for the HW cursor image, so return
FALSE to signal a software cursor must be used if a transform is in use
on any CRTC.

v2: Check crtc->transformPresent instead of crtc->transform_in_use. The
    latter is TRUE for rotation as well, which we handle correctly.

Reviewed-by: Keith Packard <keithp@keithp.com>
(cherry picked from commit a4ffa8721d)
2016-03-11 13:14:33 -05:00
Michel Dänzer af87ab6287 xfree86/modes: Refactor xf86_use_hw_cursor_argb to use xf86_use_hw_cursor (v2)
This reduces code duplication.

v2: No functional change this time.

Reviewed-by: Keith Packard <keithp@keithp.com>
(cherry picked from commit c3e4e9fc5d)
2016-03-11 13:14:33 -05:00
Michel Dänzer 87c23dc471 glamor: Source pictures are always depth 32
We were using the destination pixmap depth to determine the source
picture format.

Fixes incorrect text rendering with some MATE desktop GTK3 themes.

Reviewed-by: Adam Jackson <ajax@redhat.com>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=94246
Signed-off-by: Michel Dänzer <michel.daenzer@amd.com>
(cherry picked from commit a3e681eafa)
2016-03-11 13:14:33 -05:00
Michel Dänzer 0220275531 glamor: Factor out glamor_set_color_depth from glamor_set_color
The former takes explicit screen and depth parameters instead of
deriving them from a pixmap.

Reviewed-by: Adam Jackson <ajax@redhat.com>
Signed-off-by: Michel Dänzer <michel.daenzer@amd.com>
(cherry picked from commit b05ae79ee3)
2016-03-11 13:14:33 -05:00
Hans de Goede 79985270f1 glamor: Fix XvPutImage when src_y != 0
We already take src_y into account when uploading the src data by
starting at the top line of the src data when uploading.

Adjust src_y accordingly when rendering.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
(cherry picked from commit 947e94a341)
2016-03-11 13:14:33 -05:00
Rui Matos ddca8e1647 build: Enable vidmode independently from Xorg
This allows building Xwayland without Xorg and still include the
vidmode extension.

v2: Use PKG_CHECK_EXISTS instead of PKG_CHECK_MODULES

Signed-off-by: Rui Matos <tiagomatos@gmail.com>
Reviewed-by: Emil Velikov <emil.l.velikov@gmail.com>
(cherry picked from commit 40a164b8f4)
2016-03-11 13:14:33 -05:00
Julien Cristau 7680f558e1 xfixes: avoid double free if AddResource fails
pChc is already freed through CursorFreeHideCount →
deleteCursorHideCount.

Reviewed-by: Rémi Cardona <remi@gentoo.org>
Signed-off-by: Julien Cristau <jcristau@debian.org>
(cherry picked from commit 2be527b1d4)
2016-03-11 13:14:33 -05:00
Julien Cristau b7e1f25005 render: free already allocated formats in PictureInit failure case
Probably pointless, if this fails you're not likely to get far...

Reviewed-by: Rémi Cardona <remi@gentoo.org>
Signed-off-by: Julien Cristau <jcristau@debian.org>
(cherry picked from commit 4217db89ec)
2016-03-11 13:14:33 -05:00
Julien Cristau 518a0c179f record: don't call RecordDeleteContext when AddResource fails
Reviewed-by: Rémi Cardona <remi@gentoo.org>
Signed-off-by: Julien Cristau <jcristau@debian.org>
(cherry picked from commit 054f807178)
2016-03-11 13:14:33 -05:00
Julien Cristau dae9c195a9 xwin: no need to free auth data if AddResource fails
This is taken care of by SecurityDeleteAuthorization

Reviewed-by: Rémi Cardona <remi@gentoo.org>
Signed-off-by: Julien Cristau <jcristau@debian.org>
(cherry picked from commit d0c1a5bc61)
2016-03-11 13:14:33 -05:00
Julien Cristau 4bbaffc813 modesetting: avoid double free if AddResource fails
ms_dri2_frame_event_client_gone or ms_dri2_frame_event_drawable_gone
already free the resource.

Reviewed-by: Rémi Cardona <remi@gentoo.org>
Signed-off-by: Julien Cristau <jcristau@debian.org>
(cherry picked from commit acf263df81)
2016-03-11 13:14:33 -05:00
Julien Cristau 8616bd95de dmx/glxProxy: don't free the glx pixmap twice if AddResource fails
Reviewed-by: Rémi Cardona <remi@gentoo.org>
Signed-off-by: Julien Cristau <jcristau@debian.org>
(cherry picked from commit 164753f158)
2016-03-11 13:14:33 -05:00
Julien Cristau dcbf88aea7 glx: don't call pGlxDraw->destroy() if AddResource fails
AddResource will have called DrawableGone, which takes care of the
destruction.

Reviewed-by: Rémi Cardona <remi@gentoo.org>
Signed-off-by: Julien Cristau <jcristau@debian.org>
(cherry picked from commit 59b9c3d5e4)
2016-03-11 13:14:33 -05:00
Julien Cristau ab197ee947 xvmc: Fix unchecked AddResource
Reviewed-by: Rémi Cardona <remi@gentoo.org>
Signed-off-by: Julien Cristau <jcristau@debian.org>
(cherry picked from commit 119d5c0e2f)
2016-03-11 13:14:33 -05:00
Jonas Ådahl bd022f0314 xwayland: Correctly detect whether posix_fallocate exists
We had HAVE_POSIX_FALLOCATE checks, but no such macros were ever
defined anywhere. This commit makes it so that this macro is defined if
the posix_fallocate is detected during configure.

Signed-off-by: Jonas Ådahl <jadahl@gmail.com>
Reviewed-by: Julien Cristau <jcristau@debian.org>
(cherry picked from commit a2c3c34b44)
2016-03-11 13:14:32 -05:00
Julien Cristau 23d9b2a566 xv: fix double free in AddResource failure case
XvdiDestroyVideoNotifyList already frees the list if AddResource fails,
so don't do it twice.  And set tpn->client to NULL explicitly to avoid
confusing uninitialized memory with a valid value.

Reviewed-by: Adam Jackson <ajax@redhat.com>
Signed-off-by: Julien Cristau <jcristau@debian.org>
(cherry picked from commit 939ce0bae6)
2016-03-11 13:14:32 -05:00
Adam Jackson 90b854b2ac dri1: Fix unchecked AddResource
Signed-off-by: Adam Jackson <ajax@redhat.com>
Reviewed-by: Julien Cristau <jcristau@debian.org>
(cherry picked from commit 05e1bcf56e)
2016-03-11 13:14:32 -05:00
Adam Jackson 0e3cc3d042 xv: Fix unchecked AddResource
Reviewed-by: Julien Cristau <jcristau@debian.org>
Signed-off-by: Adam Jackson <ajax@redhat.com>
(cherry picked from commit 093f9505c1)
2016-03-11 13:14:32 -05:00
Olivier Fourdan 3d7bfe02cc vidmode: build without xf86vidmodeproto
git commit f175cf45:

  vidmode: move to a separate library of its own

introduced a regression where the xserver would not build when
xf86vidmodeproto is not installed even if the configure option
"--disable-xf86vidmode" is specified.

Fix build failure when xf86vidmodeproto is not installed.

Reviewed-by: Adam Jackson <ajax@redhat.com>
Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
(cherry picked from commit ac4d8c7cee)
2016-03-11 13:14:32 -05:00
Olivier Fourdan a49e7b9c2e xwayland: fix a crash on output removal
On output removal, the CRTC that was added in xwl_output_create()
is not removed in xwl_output_destroy() and would cause a segmentation
fault later on in ProcRRGetMonitors():

  (EE) Segmentation fault at address 0x100000001
  (EE)
  (EE) 10: ? (?+0x29) [0x29]
  (EE) 9: /usr/bin/Xwayland (_start+0x29) [0x423299]
  (EE) 8: /lib64/libc.so.6 (__libc_start_main+0xf0) [0x7fdd80e7f580]
  (EE) 7: /usr/bin/Xwayland (dix_main+0x3b3) [0x544ef3]
  (EE) 6: /usr/bin/Xwayland (Dispatch+0x31e) [0x54109e]
  (EE) 5: /usr/bin/Xwayland (ProcRRGetMonitors+0x9b) [0x4ca18b]
  (EE) 4: /usr/bin/Xwayland (RRMonitorMakeList+0x269) [0x4c9ba9]
  (EE) 3: /usr/bin/Xwayland (RRMonitorSetFromServer+0x118) [0x4c9198]
  (EE) 2: /usr/bin/Xwayland (MakeAtom+0x30) [0x530710]
  (EE) 1: /lib64/libc.so.6 (__restore_rt+0x0) [0x7fdd80e93b1f]
  (EE) 0: /usr/bin/Xwayland (OsSigHandler+0x29) [0x5792d9]

Remove the output CRTC in xwl_output_destroy() to avoid the crash.

Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
Reviewed-by: Daniel Stone <daniels@collabora.com>
(cherry picked from commit 2116f03be0)
2016-03-11 13:14:32 -05:00
Michel Dänzer c7735f102a present: Call present_restore_screen_pixmap from present_set_abort_flip
After present_set_abort_flip, the screen pixmap will be used for all
screen drawing, so we need to restore the current flip pixmap contents
to the screen pixmap here as well.

Improves flashing / stutter e.g. when something like a popup menu appears
on top of a flipping fullscreen window or when switching out of
fullscreen.

Note that this means present_set_abort_flip now relies on screen->root
being non-NULL, but that's already the case in other present code.

Reviewed-by: Keith Packard <keithp@keithp.com>
Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
(cherry picked from commit 1bee4e254c)
2016-03-11 13:14:32 -05:00
Michel Dänzer 05d9de4e9a present: Factor code for restoring screen pixmap out of present_unflip (v2)
The following fix will use the refactored function.

The logic in the refactored function is slightly simplified, exploiting
the fact that this function is only ever called with a valid flip
pixmap.

v2: Assert that flip_pixmap is non-NULL instead of testing and bailing
    on NULL, preserve test for flip_window being non-NULL before calling
    present_set_tree_pixmap for it (Keith Packard)

Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk> (v1)
Reviewed-by: Keith Packard <keithp@keithp.com>
(cherry picked from commit 4611e902c2)
2016-03-11 13:14:32 -05:00
Michel Dänzer 49b2a0fb0e present: Only update screen pixmap from flip pixmap once per unflip
present_unflip may be called several times from present_check_flip_window
during the same unflip. We can only copy to the screen pixmap the first
time, otherwise we may scribble over other windows. The flip pixmap
contents don't get updated after the first time anyway.

Fixes at least the following problems, which were introduced by commit
806470b9 ("present: Copy unflip contents back to the Screen Pixmap"):

On xfwm4 without compositing, run glxgears and put its window into
fullscreen mode to start flipping. While in fullscreen, open the xfwm4
window menu by pressing Alt-Space. The window menu was invisible most
of the time because it was getting scribbled over by a repeated unflip
copy.

When switching a flipping window out of fullscreen, a repeated unflip
copy could leave artifacts of the flip pixmap on the desktop.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=94325

Reviewed-by: Keith Packard <keithp@keithp.com>
Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
(cherry picked from commit 72328e5eb9)
2016-03-11 13:14:32 -05:00
Michel Dänzer d5b8bc69e2 dri3: Refuse to work for remote clients (v2)
Prevents clients forwarded via SSH from hanging while waiting for the
reply from the DRI3Open request.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=93261

v2: Return BadMatch instead of BadRequest (Keith Packard)

Reviewed-by: Keith Packard <keithp@keithp.com>
(cherry picked from commit 43eb5b6047)
2016-03-11 13:14:32 -05:00
Olivier Fourdan 15454c5d26 xwayland: add partial xvidmode extension support
Older games (mostly those based on SDL 1.x) rely on the XVidMode
extension and would refuse to run without.

Add a simple, limited and read-only xvidmode support that reports the
current mode used so that games that rely on xvidmode extension can run
on XWayland.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=87806
Reviewed-by: Adam Jackson <ajax@redhat.com>
Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
(cherry picked from commit 6070a749d9)
2016-03-11 13:14:32 -05:00
Olivier Fourdan f2b346f9ba vidmode: remove redundant DIX function
The API signature of the DIX xf86VidModeGetGammaRampSize() is now
identical to the xf86cmap's xf86GetGammaRampSize() and all it does is
actually call xf86GetGammaRampSize() so we can save one vfunc.

Remove uneeded xf86VidModeGetGammaRampSize() function.

Reviewed-by: Adam Jackson <ajax@redhat.com>
Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
(cherry picked from commit b430f53bb7)
2016-03-11 13:14:32 -05:00
Olivier Fourdan d381d59e44 vidmode: remove redundant check
The DIX already checks for VidModePrivateKey to get the vfunc, so
checking for this again in the DDX is redundant.

Remove the redundant function xf86VidModeAvailable() from the DDX.

Reviewed-by: Adam Jackson <ajax@redhat.com>
Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
(cherry picked from commit 48fccde2bf)
2016-03-11 13:14:32 -05:00
Olivier Fourdan 349b71a37e vidmode: move to a separate library of its own
XVidMode extension might be useful to non hardware servers as well (e.g.
Xwayand) so that applications that rely on it (e.g. lot of older games)
can at least have read access to XVidMode.

But the implementation is very XFree86 centric, so the idea is to add
a bunch of vfunc that other non-XFree86 servers can hook up into to
provide a similar functionality.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=87806
Reviewed-by: Adam Jackson <ajax@redhat.com>
Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
(cherry picked from commit f175cf45ae)
2016-03-11 13:14:32 -05:00
Olivier Fourdan 860669b186 vidmode: rename DDX functions
To avoid confusion as to what belongs on the DDX and what not.

Reviewed-by: Adam Jackson <ajax@redhat.com>
Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
(cherry picked from commit 17097e083b)
2016-03-11 13:14:32 -05:00
Olivier Fourdan 64053645cf vidmode: move display mode definitions
To be able to reuse the VidMode extension in a non-hardware server, the
display mode definitions need to be accessible from DIX.

Reviewed-by: Adam Jackson <ajax@redhat.com>
Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
(cherry picked from commit ddfb8c009a)
2016-03-11 13:14:32 -05:00
Olivier Fourdan 227b533bf4 vidmode: remove mode access from public API
The mode access functions (namely VidModeCreateMode(),
VidModeCopyMode(), VidModeGetModeValue() and VidModeSetModeValue()) are
used only in xf86VidMode code and do not need to be available anywhere
else.

Remove these functions from the public VidMode API and move them as
static where they are used.

Reviewed-by: Adam Jackson <ajax@redhat.com>
Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
(cherry picked from commit e29a64de66)
2016-03-11 13:14:31 -05:00
Olivier Fourdan 9824faaa58 vidmode: use appropriate DisplayModePtr type
The API uses an untyped pointer (void *) where a DisplayModePtr is
expected.

Clean up the API to use the appropriate type, as DisplayModePtr is
really all that will be passed there.

Reviewed-by: Adam Jackson <ajax@redhat.com>
Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
(cherry picked from commit b7962ade52)
2016-03-11 13:14:31 -05:00
Olivier Fourdan 3b52aee6dd vidmode: remove VidModeGetMonitor()
VidModeGetMonitor() is used solely in ProcXF86VidModeGetMonitor() to
get a untyped monitor pointer that is passed back straight again to
VidModeGetMonitorValue().

This is actually useless as VidModeGetMonitorValue() could as well get
the monitor from the ScreenPtr just like VidModeGetMonitor() does.

Reviewed-by: Adam Jackson <ajax@redhat.com>
Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
(cherry picked from commit 12f714fd95)
2016-03-11 13:14:31 -05:00
Olivier Fourdan b241fd6413 vidmode: use ScreenPtr instead of screen index
New code passes ScreenPtr instead of the screen index.

Change the VidMode functions to take a ScreenPtr.

Reviewed-by: Adam Jackson <ajax@redhat.com>
Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
(cherry picked from commit f6f7e21133)
2016-03-11 13:14:31 -05:00
Olivier Fourdan 2028b9066d vidmode: get rid of the CloseScreen wrapper
As we rely on dixRegisterPrivateKey() to allocate the memory for us that
will be free automatically, we do not need the CloseScreen wrapper
anymore.

Reviewed-by: Adam Jackson <ajax@redhat.com>
Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
(cherry picked from commit 6e898ef080)
2016-03-11 13:14:31 -05:00
Olivier Fourdan cb3a8768db vidmode: use appropriate API
dixRegisterPrivateKey() can allocate memory that will be freed when the
screen is teared down.

No need to calloc() and free the memory ourself using a broken ref
counting method.

Reviewed-by: Adam Jackson <ajax@redhat.com>
Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
(cherry picked from commit 341f3bccaf)
2016-03-11 13:14:31 -05:00
Chris Wilson 45d17e6bb0 dri2: Allow many blocked clients per-drawable
This patch was motivated by the need to fix the use-after-free in
dri2ClientWake, but in doing so removes an arbitrary restriction that
limits DRI2 to only blocking the first client on each drawable. In order
to fix the use-after-free, we need to avoid touching our privates in the
ClientSleep callback and so we want to only use that external list as
our means of controlling sleeps and wakeups. We thus have a list of
sleeping clients at our disposal and can manage multiple events and
sources.

Reviewed-by: Adam Jackson <ajax@redhat.com>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
(cherry picked from commit d888295457)
2016-03-11 13:14:31 -05:00
Chris Wilson 204e85786f dix: Add ClientSignalAll()
This is a variant of ClientSignal() that signals all clients with an
optional matching sleeping client, function and closure.

Reviewed-by: Adam Jackson <ajax@redhat.com>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
(cherry picked from commit bc3634010c)
2016-03-11 13:14:31 -05:00