mirror of
https://github.com/brl/mutter.git
synced 2024-11-29 03:20:46 -05:00
surface-actor-x11: Assign X11 Display only if we have resources
free_damage and detach_pixmap functions are called inside dispose and an object can be disposed multiple times, even when the display is already closed. So, don't try to deference a possibly null-pointer, assigning the xdisplay too early, as if the X11 related resources have been unset, the server might not be open anymore. In fact, we assume that if we have a damage or a pixmap set, the display is still open. https://gitlab.gnome.org/GNOME/mutter/merge_requests/660
This commit is contained in:
parent
7776941b89
commit
d7d97f2477
@ -71,11 +71,13 @@ static void
|
|||||||
free_damage (MetaSurfaceActorX11 *self)
|
free_damage (MetaSurfaceActorX11 *self)
|
||||||
{
|
{
|
||||||
MetaDisplay *display = self->display;
|
MetaDisplay *display = self->display;
|
||||||
Display *xdisplay = meta_x11_display_get_xdisplay (display->x11_display);
|
Display *xdisplay;
|
||||||
|
|
||||||
if (self->damage == None)
|
if (self->damage == None)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
xdisplay = meta_x11_display_get_xdisplay (display->x11_display);
|
||||||
|
|
||||||
meta_x11_error_trap_push (display->x11_display);
|
meta_x11_error_trap_push (display->x11_display);
|
||||||
XDamageDestroy (xdisplay, self->damage);
|
XDamageDestroy (xdisplay, self->damage);
|
||||||
self->damage = None;
|
self->damage = None;
|
||||||
@ -86,12 +88,14 @@ static void
|
|||||||
detach_pixmap (MetaSurfaceActorX11 *self)
|
detach_pixmap (MetaSurfaceActorX11 *self)
|
||||||
{
|
{
|
||||||
MetaDisplay *display = self->display;
|
MetaDisplay *display = self->display;
|
||||||
Display *xdisplay = meta_x11_display_get_xdisplay (display->x11_display);
|
|
||||||
MetaShapedTexture *stex = meta_surface_actor_get_texture (META_SURFACE_ACTOR (self));
|
MetaShapedTexture *stex = meta_surface_actor_get_texture (META_SURFACE_ACTOR (self));
|
||||||
|
Display *xdisplay;
|
||||||
|
|
||||||
if (self->pixmap == None)
|
if (self->pixmap == None)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
xdisplay = meta_x11_display_get_xdisplay (display->x11_display);
|
||||||
|
|
||||||
/* Get rid of all references to the pixmap before freeing it; it's unclear whether
|
/* Get rid of all references to the pixmap before freeing it; it's unclear whether
|
||||||
* you are supposed to be able to free a GLXPixmap after freeing the underlying
|
* you are supposed to be able to free a GLXPixmap after freeing the underlying
|
||||||
* pixmap, but it certainly doesn't work with current DRI/Mesa
|
* pixmap, but it certainly doesn't work with current DRI/Mesa
|
||||||
|
Loading…
Reference in New Issue
Block a user