From d52aa4c1a4a6e84c39db8cf8f154fcdc5ac10c33 Mon Sep 17 00:00:00 2001 From: Vincent Wei Date: Sun, 23 Jul 2023 16:03:08 +0800 Subject: [PATCH] do cleanup for free surfaces --- src/newgal/drm/drmvideo.c | 16 +++++++++++----- src/newgal/shadow/shadow.c | 21 ++++++++++----------- 2 files changed, 21 insertions(+), 16 deletions(-) diff --git a/src/newgal/drm/drmvideo.c b/src/newgal/drm/drmvideo.c index bba3b4d5..d2156249 100644 --- a/src/newgal/drm/drmvideo.c +++ b/src/newgal/drm/drmvideo.c @@ -940,6 +940,10 @@ static void drm_cleanup(DrmVideoData* vdata) static void DRM_DeleteDevice(GAL_VideoDevice *device) { + if (device->hidden->real_screen) { + GAL_FreeSurface(device->hidden->real_screen); + } + drm_cleanup(device->hidden); if (device->hidden->dev_name) @@ -1716,6 +1720,10 @@ static void DRM_VideoQuit(_THIS) #endif cancel_async_updater(this); + if (this->hidden->shadow_screen) { + GAL_FreeSurface(this->hidden->shadow_screen); + } + #ifndef _MGSCHEMA_COMPOSITING if (this->hidden->dbl_buff && this->hidden->update_lock != SEM_FAILED) { if (sem_unlink (SEM_UPDATE_LOCK)) { @@ -2646,11 +2654,9 @@ static GAL_Surface *DRM_SetVideoMode(_THIS, GAL_Surface *current, real_buffer = vdata->driver_ops->create_buffer(vdata->driver, drm_format, 0, info->width, info->height, DRM_SURBUF_TYPE_SCANOUT); - if (vdata->dbl_buff) { - if (drm_map_buffer_via_dmabuf(vdata, real_buffer)) { - _WRN_PRINTF("Cannot map real screen buffer via DMA-BUF\n"); - vdata->driver_ops->map_buffer(vdata->driver, real_buffer); - } + if (drm_map_buffer_via_dmabuf(vdata, real_buffer)) { + _WRN_PRINTF("Cannot map real screen buffer via DMA-BUF\n"); + vdata->driver_ops->map_buffer(vdata->driver, real_buffer); } } else { diff --git a/src/newgal/shadow/shadow.c b/src/newgal/shadow/shadow.c index 853a86ac..819ecfb9 100644 --- a/src/newgal/shadow/shadow.c +++ b/src/newgal/shadow/shadow.c @@ -328,6 +328,7 @@ static ShadowFBHeader* _shadowfbheader; DWORD __mg_shadow_rotate_flags; extern void (*__mg_ial_change_mouse_xy_hook)(int* x, int* y); extern GAL_Surface* __gal_screen; +static ShadowFBOps shadow_fb_ops; /* SHADOW driver bootstrap functions */ static int SHADOW_Available(void) @@ -335,10 +336,15 @@ static int SHADOW_Available(void) return 1; } -static void SHADOW_DeleteDevice(GAL_VideoDevice *device) +static void SHADOW_DeleteDevice(_THIS) { - free (device->hidden); - free (device); + if (this->hidden->realfb_info) { + shadow_fb_ops.release(this->hidden->realfb_info); + this->hidden->realfb_info = NULL; + } + + free(this->hidden); + free(this); } static void SHADOW_UpdateRects (_THIS, int numrects, GAL_Rect *rects) @@ -427,7 +433,6 @@ VideoBootStrap SHADOW_bootstrap = { #define LEN_MODE 32 -static ShadowFBOps shadow_fb_ops; static int RealEngine_GetInfo (RealFBInfo * realfb_info) { GAL_PixelFormat real_vformat; @@ -762,9 +767,6 @@ static void *task_do_update(void *data) if (RECTH(this->hidden->update_rect)) { update_helper(this, real_device, &this->hidden->update_rect); } - else { - _DBG_PRINTF("Empty update rectangle\n"); - } #if USE_UPDATE_SEM if (sem_post(&this->hidden->update_sem)) @@ -1345,10 +1347,7 @@ static void SHADOW_VideoQuit (_THIS) _shadowfbheader = NULL; } - if (this->hidden->realfb_info) { - shadow_fb_ops.release(this->hidden->realfb_info); - this->hidden->realfb_info = NULL; - } + GAL_FreeSurface(this->screen); } #else