summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichel Dänzer <michel.daenzer@amd.com>2017-03-02 17:08:19 +0900
committerMichel Dänzer <michel@daenzer.net>2017-03-03 16:10:07 +0900
commit53926db2355de0a324c205703a0377b498136f65 (patch)
tree896f72f14cf31fd4a1ba54bbaf58940c80155753
parent45a8ec6257c370eecf43b6b8010863e37b704872 (diff)
Fix flip event data leak if calloc or drmModeAddFB fails
(Ported from radeon commit 481394e3c9f9f7d88bb66fe9ae8834c87952a8ab) Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r--src/amdgpu_dri2.c4
-rw-r--r--src/drmmode_display.c4
2 files changed, 5 insertions, 3 deletions
diff --git a/src/amdgpu_dri2.c b/src/amdgpu_dri2.c
index ede6c0e..a83d217 100644
--- a/src/amdgpu_dri2.c
+++ b/src/amdgpu_dri2.c
@@ -465,9 +465,9 @@ xf86CrtcPtr amdgpu_dri2_drawable_crtc(DrawablePtr pDraw, Bool consider_disabled)
static void
amdgpu_dri2_flip_event_abort(xf86CrtcPtr crtc, void *event_data)
{
- AMDGPUInfoPtr info = AMDGPUPTR(crtc->scrn);
+ if (crtc)
+ AMDGPUPTR(crtc->scrn)->drmmode.dri2_flipping = FALSE;
- info->drmmode.dri2_flipping = FALSE;
free(event_data);
}
diff --git a/src/drmmode_display.c b/src/drmmode_display.c
index 67dd61b..bc7b9c3 100644
--- a/src/drmmode_display.c
+++ b/src/drmmode_display.c
@@ -2688,8 +2688,10 @@ error:
amdgpu_drm_abort_entry(drm_queue_seq);
else if (crtc)
drmmode_flip_abort(crtc, flipdata);
- else if (flipdata && flipdata->flip_count <= 1)
+ else {
+ abort(NULL, data);
free(flipdata);
+ }
xf86DrvMsg(scrn->scrnIndex, X_WARNING, "Page flip failed: %s\n",
strerror(errno));