present: Don't stash the MSC value when present_get_ust_msc fails
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@kde.org> Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
This commit is contained in:
parent
c1f5f9022f
commit
f6ce23fbfc
|
@ -710,9 +710,9 @@ present_pixmap(WindowPtr window,
|
||||||
present_notify_ptr notifies,
|
present_notify_ptr notifies,
|
||||||
int num_notifies)
|
int num_notifies)
|
||||||
{
|
{
|
||||||
uint64_t ust;
|
uint64_t ust = 0;
|
||||||
uint64_t target_msc;
|
uint64_t target_msc;
|
||||||
uint64_t crtc_msc;
|
uint64_t crtc_msc = 0;
|
||||||
int ret;
|
int ret;
|
||||||
present_vblank_ptr vblank, tmp;
|
present_vblank_ptr vblank, tmp;
|
||||||
ScreenPtr screen = window->drawable.pScreen;
|
ScreenPtr screen = window->drawable.pScreen;
|
||||||
|
@ -734,13 +734,15 @@ present_pixmap(WindowPtr window,
|
||||||
target_crtc = present_get_crtc(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);
|
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
|
if (ret == Success) {
|
||||||
*/
|
/* Stash the current MSC away in case we need it later
|
||||||
window_priv->msc = crtc_msc;
|
*/
|
||||||
|
window_priv->msc = crtc_msc;
|
||||||
|
}
|
||||||
|
|
||||||
/* Adjust target_msc to match modulus
|
/* Adjust target_msc to match modulus
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in New Issue