do cleanup for free surfaces

This commit is contained in:
Vincent Wei
2023-07-23 16:03:08 +08:00
parent d6a961aa6c
commit d52aa4c1a4
2 changed files with 21 additions and 16 deletions

View File

@@ -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 {

View File

@@ -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