[PATCH] present: Don't stash the MSC value when present_get_ust_msc fails
Michel Dänzer
michel at daenzer.net
Thu Sep 10 19:33:12 PDT 2015
On 11.09.2015 06:33, Fredrik Höglund wrote:
> Otherwise we stash an uninitalized value, and later use it to compute
> the msc_offset for the window. Also initialize ust and crtc_msc so we
> never use uninitalized values when present_get_ust_msc fails.
>
> This fixes clients getting stuck waiting indefinitely for an idle
> event when a CRTC is turned off.
>
> Signed-off-by: Fredrik Höglund <fredrik at kde.org>
> ---
> present/present.c | 14 ++++++++------
> 1 file changed, 8 insertions(+), 6 deletions(-)
>
> diff --git a/present/present.c b/present/present.c
> index a634601..7ddffbd 100644
> --- a/present/present.c
> +++ b/present/present.c
> @@ -710,9 +710,9 @@ present_pixmap(WindowPtr window,
> present_notify_ptr notifies,
> int num_notifies)
> {
> - uint64_t ust;
> + uint64_t ust = 0;
> uint64_t target_msc;
> - uint64_t crtc_msc;
> + uint64_t crtc_msc = 0;
> int ret;
> present_vblank_ptr vblank, tmp;
> ScreenPtr screen = window->drawable.pScreen;
> @@ -734,13 +734,15 @@ present_pixmap(WindowPtr window,
> target_crtc = present_get_crtc(window);
> }
>
> - present_get_ust_msc(screen, target_crtc, &ust, &crtc_msc);
> + ret = present_get_ust_msc(screen, target_crtc, &ust, &crtc_msc);
>
> target_msc = present_window_to_crtc_msc(window, target_crtc, window_msc, crtc_msc);
>
> - /* Stash the current MSC away in case we need it later
> - */
> - window_priv->msc = crtc_msc;
> + if (ret == Success) {
> + /* Stash the current MSC away in case we need it later
> + */
> + window_priv->msc = crtc_msc;
> + }
>
> /* Adjust target_msc to match modulus
> */
>
My only doubt is about present_window_to_crtc_msc(). If target_msc
doesn't match window_priv->crtc, presumably present_get_ust_msc() will
fail there as well, so window_priv->msc (the last recorded valid MSC
value for the window) will be added to window_priv->msc_offset. I
suspect that's not right and might still cause similar trouble down the
road.
That said, it's probably an unlikely scenario, and your change certainly
looks like an improvement.
--
Earthling Michel Dänzer | http://www.amd.com
Libre software enthusiast | Mesa and X developer
More information about the xorg-devel
mailing list