xlib: fix undefined behaviour when freeing colormap too early

Summary:
On Ubuntu 14.04 it makes a 32 bit depth window un-responsive
to any XEvent.

Reviewers: cedric, raster

Reviewed By: raster

Subscribers: raster, capOM, cedric

Differential Revision: https://phab.enlightenment.org/D1236
This commit is contained in:
Julien Isorce 2014-08-21 18:40:01 +09:00 committed by Carsten Haitzler (Rasterman)
parent fce1e61ff5
commit d3c56d5c74
2 changed files with 4 additions and 1 deletions

View File

@ -1683,7 +1683,6 @@ _ecore_x_window_argb_internal_new(Ecore_X_Window parent,
CWWinGravity,
&attr);
if (_ecore_xlib_sync) ecore_x_sync();
XFreeColormap(_ecore_x_disp, attr.colormap);
if (parent == DefaultRootWindow(_ecore_x_disp))
ecore_x_window_defaults_set(win);

View File

@ -180,6 +180,10 @@ evas_software_xlib_outbuf_free(Outbuf *buf)
if (buf->priv.pal)
evas_software_xlib_x_color_deallocate(buf->priv.x11.xlib.disp, buf->priv.x11.xlib.cmap,
buf->priv.x11.xlib.vis, buf->priv.pal);
/* safe because no effect on the default colormap */
XFreeColormap (buf->priv.x11.xlib.disp, buf->priv.x11.xlib.cmap);
eina_array_flush(&buf->priv.onebuf_regions);
free(buf);
_clear_xob(0);