ui/gtk: graphic_hw_gl_flushed after closing dmabuf->fence_fd

The dmabuf often becomes invalid right after unblocking pipeline
and graphic_hw_gl_flushed in case a new scanout blob is submitted
because the dmabuf associated with the current guest scanout is
freed after swapping.

So both graphic_hw_gl_block and graphic_hw_gl_flushed should be
executed after closing fence_fd for the current dmabuf.

Cc: Gerd Hoffmann <kraxel@redhat.com>
Cc: Vivek Kasireddy <vivek.kasireddy@intel.com>
Signed-off-by: Dongwon Kim <dongwon.kim@intel.com>
Message-Id: <20211121172237.14937-1-dongwon.kim@intel.com>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
Dongwon Kim 2021-11-21 09:22:37 -08:00 committed by Gerd Hoffmann
parent f14aab420c
commit c3abdb2faf

View File

@ -589,11 +589,11 @@ void gd_hw_gl_flushed(void *vcon)
VirtualConsole *vc = vcon; VirtualConsole *vc = vcon;
QemuDmaBuf *dmabuf = vc->gfx.guest_fb.dmabuf; QemuDmaBuf *dmabuf = vc->gfx.guest_fb.dmabuf;
graphic_hw_gl_block(vc->gfx.dcl.con, false);
graphic_hw_gl_flushed(vc->gfx.dcl.con);
qemu_set_fd_handler(dmabuf->fence_fd, NULL, NULL, NULL); qemu_set_fd_handler(dmabuf->fence_fd, NULL, NULL, NULL);
close(dmabuf->fence_fd); close(dmabuf->fence_fd);
dmabuf->fence_fd = -1; dmabuf->fence_fd = -1;
graphic_hw_gl_block(vc->gfx.dcl.con, false);
graphic_hw_gl_flushed(vc->gfx.dcl.con);
} }
/** DisplayState Callbacks (opengl version) **/ /** DisplayState Callbacks (opengl version) **/