diff options
author | Keith Packard <keithp@keithp.com> | 2008-03-21 03:16:09 -0700 |
---|---|---|
committer | Keith Packard <keithp@keithp.com> | 2008-11-24 13:24:41 -0800 |
commit | 7236fd9dd4e9f5c4cb5bafa5c2a18cff12a0444c (patch) | |
tree | 9221dd5bbceb27abb32c8d9c0e0efedc5edf8afc /hw/xfree86/modes | |
parent | 7e69e364d2ef146d8ec3651d04bdd6d641017449 (diff) |
Be careful about copying transforms around; they have allocated memory.
Diffstat (limited to 'hw/xfree86/modes')
-rw-r--r-- | hw/xfree86/modes/xf86Crtc.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c index d24fc86f0..7dce1abf3 100644 --- a/hw/xfree86/modes/xf86Crtc.c +++ b/hw/xfree86/modes/xf86Crtc.c @@ -271,7 +271,10 @@ xf86CrtcSetModeTransform (xf86CrtcPtr crtc, DisplayModePtr mode, Rotation rotati saved_x = crtc->x; saved_y = crtc->y; saved_rotation = crtc->rotation; - saved_transform = crtc->transform; + if (crtc->transformPresent) { + RRTransformInit (&saved_transform); + RRTransformCopy (&saved_transform, &crtc->transform); + } saved_transform_present = crtc->transformPresent; /* Update crtc values up front so the driver can rely on them for mode @@ -283,7 +286,6 @@ xf86CrtcSetModeTransform (xf86CrtcPtr crtc, DisplayModePtr mode, Rotation rotati crtc->rotation = rotation; if (transform) { RRTransformCopy (&crtc->transform, transform); - crtc->transform = *transform; crtc->transformPresent = TRUE; } else crtc->transformPresent = FALSE; @@ -380,7 +382,8 @@ done: crtc->y = saved_y; crtc->rotation = saved_rotation; crtc->mode = saved_mode; - crtc->transform = saved_transform; + if (saved_transform_present) + RRTransformCopy (&crtc->transform, &saved_transform); crtc->transformPresent = saved_transform_present; } |