diff --git a/src/radeon_legacy_memory.c b/src/radeon_legacy_memory.c index 3e75291..3b960f4 100644 --- a/src/radeon_legacy_memory.c +++ b/src/radeon_legacy_memory.c @@ -26,6 +26,9 @@ radeon_legacy_allocate_memory(ScrnInfoPtr pScrn, if (info->cs) { struct radeon_bo *video_bo; + if (*mem_struct) + radeon_legacy_free_memory(pScrn, mem_struct); + video_bo = radeon_bo_open(info->bufmgr, 0, size, RADEON_GPU_PAGE_SIZE, domain, 0); *mem_struct = video_bo; diff --git a/src/radeon_textured_video.c b/src/radeon_textured_video.c index 36bcb56..c9b4324 100644 --- a/src/radeon_textured_video.c +++ b/src/radeon_textured_video.c @@ -317,6 +317,12 @@ RADEONPutImageTextured(ScrnInfoPtr pScrn, if (pPriv->video_memory != NULL && size != pPriv->size) { radeon_legacy_free_memory(pScrn, pPriv->video_memory); pPriv->video_memory = NULL; + + if (info->cs) { + pPriv->src_bo[0] = NULL; + radeon_legacy_free_memory(pScrn, (void*)&pPriv->src_bo[1]); + pPriv->src_bo[1] = NULL; + } } if (pPriv->video_memory == NULL) { diff --git a/src/radeon_video.c b/src/radeon_video.c index 0bb5ab3..1ae1e2f 100644 --- a/src/radeon_video.c +++ b/src/radeon_video.c @@ -1657,6 +1657,12 @@ RADEONStopVideo(ScrnInfoPtr pScrn, pointer data, Bool cleanup) if (pPriv->video_memory != NULL) { radeon_legacy_free_memory(pScrn, pPriv->video_memory); pPriv->video_memory = NULL; + + if (info->cs) { + pPriv->src_bo[0] = NULL; + radeon_legacy_free_memory(pScrn, (void*)&pPriv->src_bo[1]); + pPriv->src_bo[1] = NULL; + } } } return; @@ -3155,6 +3161,12 @@ RADEONVideoTimerCallback(ScrnInfoPtr pScrn, Time now) if (pPriv->video_memory != NULL) { radeon_legacy_free_memory(pScrn, pPriv->video_memory); pPriv->video_memory = NULL; + + if (info->cs && pPriv->textured) { + pPriv->src_bo[0] = NULL; + radeon_legacy_free_memory(pScrn, (void*)&pPriv->src_bo[1]); + pPriv->src_bo[1] = NULL; + } } pPriv->videoStatus = 0; info->VideoTimerCallback = NULL;