--- ./nx-X11/programs/Xserver/hw/nxagent/X/NXmiwindow.c.X.original 2015-02-13 14:03:44.744441510 +0100 +++ ./nx-X11/programs/Xserver/hw/nxagent/X/NXmiwindow.c 2015-02-10 19:13:13.776686935 +0100 @@ -1,3 +1,20 @@ +/**************************************************************************/ +/* */ +/* Copyright (c) 2001, 2011 NoMachine, http://www.nomachine.com/. */ +/* */ +/* NXAGENT, NX protocol compression and NX extensions to this software */ +/* are copyright of NoMachine. Redistribution and use of the present */ +/* software is allowed according to terms specified in the file LICENSE */ +/* which comes in the source distribution. */ +/* */ +/* Check http://www.nomachine.com/licensing.html for applicability. */ +/* */ +/* NX and NoMachine are trademarks of Medialogic S.p.A. */ +/* */ +/* All rights reserved. */ +/* */ +/**************************************************************************/ + /* $XFree86: xc/programs/Xserver/mi/miwindow.c,v 1.9tsi Exp $ */ /*********************************************************** @@ -1048,8 +1065,29 @@ bsExposed = (*pScreen->TranslateBackingStore) (pWin, 0, 0, pOldClip, pWin->drawable.x, pWin->drawable.y); +#ifdef NXAGENT_SERVER + + /* + * We got a few, rare, segfaults here after having + * started using the backing store. It may be a + * different bug but miChangeSaveUnder() calls mi- + * CheckSubSaveUnder() that, in turn, can change + * the backing store attribute of the window. This + * means that we may try to destroy the region + * even if it was not created at the beginning of + * this function as, at the time, the backing store + * was off. miCheckSubSaveUnder() appear to get a + * pointer to the parent, so maybe doesn't change + * the attribute of the window itself. This is to + * be better investigated. + */ + + if (WasViewable && pOldClip) + REGION_DESTROY(pScreen, pOldClip); +#else if (WasViewable) REGION_DESTROY(pScreen, pOldClip); +#endif if (bsExposed) { RegionPtr valExposed = NullRegion;