dix: Drop the third argument from WindowExposuresProcPtr

A careful read shows that it was always NULL.  It hasn't always been; as
the DDX spec indicates, it was the "occluded region that has backing
store", but since that backing store code is long gone, we can nuke it.

mi{,Overlay}WindowExposures get slightly simpler here, and will get even
simpler in just a moment.

Reviewed-by: Julien Cristau <jcristau@debian.org>
Signed-off-by: Adam Jackson <ajax@redhat.com>
This commit is contained in:
Adam Jackson 2014-09-11 12:44:54 -04:00
parent e2a3e91a56
commit 0d30d44a8c
17 changed files with 35 additions and 67 deletions

View File

@ -2601,7 +2601,7 @@ MapWindow(WindowPtr pWin, ClientPtr client)
(*pScreen->PostValidateTree) (NullWindow, pWin, VTMap); (*pScreen->PostValidateTree) (NullWindow, pWin, VTMap);
RegionNull(&temp); RegionNull(&temp);
RegionCopy(&temp, &pWin->clipList); RegionCopy(&temp, &pWin->clipList);
(*pScreen->WindowExposures) (pWin, &temp, NullRegion); (*pScreen->WindowExposures) (pWin, &temp);
RegionUninit(&temp); RegionUninit(&temp);
} }

View File

@ -240,12 +240,11 @@ fbOverlayCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc)
} }
void void
fbOverlayWindowExposures(WindowPtr pWin, fbOverlayWindowExposures(WindowPtr pWin, RegionPtr prgn)
RegionPtr prgn, RegionPtr other_exposed)
{ {
fbOverlayUpdateLayerRegion(pWin->drawable.pScreen, fbOverlayUpdateLayerRegion(pWin->drawable.pScreen,
fbOverlayWindowLayer(pWin), prgn); fbOverlayWindowLayer(pWin), prgn);
miWindowExposures(pWin, prgn, other_exposed); miWindowExposures(pWin, prgn);
} }
Bool Bool

View File

@ -82,9 +82,7 @@ extern _X_EXPORT void
fbOverlayCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc); fbOverlayCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc);
extern _X_EXPORT void extern _X_EXPORT void
fbOverlayWindowExposures(WindowPtr pWin, RegionPtr prgn);
fbOverlayWindowExposures(WindowPtr pWin,
RegionPtr prgn, RegionPtr other_exposed);
extern _X_EXPORT Bool extern _X_EXPORT Bool

View File

@ -772,7 +772,7 @@ dmxWindowExposurePredicate(Display * dpy, XEvent * ev, XPointer ptr)
* in DMX, the events that are generated by the back-end server are * in DMX, the events that are generated by the back-end server are
* redundant, so we eat them here. */ * redundant, so we eat them here. */
void void
dmxWindowExposures(WindowPtr pWindow, RegionPtr prgn, RegionPtr other_exposed) dmxWindowExposures(WindowPtr pWindow, RegionPtr prgn)
{ {
ScreenPtr pScreen = pWindow->drawable.pScreen; ScreenPtr pScreen = pWindow->drawable.pScreen;
DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum]; DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
@ -799,7 +799,7 @@ dmxWindowExposures(WindowPtr pWindow, RegionPtr prgn, RegionPtr other_exposed)
#if 1 #if 1
if (pScreen->WindowExposures) if (pScreen->WindowExposures)
pScreen->WindowExposures(pWindow, prgn, other_exposed); pScreen->WindowExposures(pWindow, prgn);
#endif #endif
DMX_WRAP(WindowExposures, dmxWindowExposures, dmxScreen, pScreen); DMX_WRAP(WindowExposures, dmxWindowExposures, dmxScreen, pScreen);
} }

View File

@ -73,8 +73,7 @@ extern Bool dmxChangeWindowAttributes(WindowPtr pWindow, unsigned long mask);
extern Bool dmxRealizeWindow(WindowPtr pWindow); extern Bool dmxRealizeWindow(WindowPtr pWindow);
extern Bool dmxUnrealizeWindow(WindowPtr pWindow); extern Bool dmxUnrealizeWindow(WindowPtr pWindow);
extern void dmxRestackWindow(WindowPtr pWindow, WindowPtr pOldNextSib); extern void dmxRestackWindow(WindowPtr pWindow, WindowPtr pOldNextSib);
extern void dmxWindowExposures(WindowPtr pWindow, RegionPtr prgn, extern void dmxWindowExposures(WindowPtr pWindow, RegionPtr prgn);
RegionPtr other_exposed);
extern void dmxCopyWindow(WindowPtr pWindow, DDXPointRec ptOldOrg, extern void dmxCopyWindow(WindowPtr pWindow, DDXPointRec ptOldOrg,
RegionPtr prgnSrc); RegionPtr prgnSrc);

View File

@ -878,7 +878,7 @@ ephyrExposePairedWindow(int a_remote)
screen = pair->local->drawable.pScreen; screen = pair->local->drawable.pScreen;
RegionNull(&reg); RegionNull(&reg);
RegionCopy(&reg, &pair->local->clipList); RegionCopy(&reg, &pair->local->clipList);
screen->WindowExposures(pair->local, &reg, NullRegion); screen->WindowExposures(pair->local, &reg);
RegionUninit(&reg); RegionUninit(&reg);
} }
#endif /* XF86DRI */ #endif /* XF86DRI */

View File

@ -86,7 +86,7 @@ static int KdXVQueryImageAttributes(XvPortPtr, XvImagePtr,
/* ScreenRec fields */ /* ScreenRec fields */
static Bool KdXVDestroyWindow(WindowPtr pWin); static Bool KdXVDestroyWindow(WindowPtr pWin);
static void KdXVWindowExposures(WindowPtr pWin, RegionPtr r1, RegionPtr r2); static void KdXVWindowExposures(WindowPtr pWin, RegionPtr r1);
static void KdXVClipNotify(WindowPtr pWin, int dx, int dy); static void KdXVClipNotify(WindowPtr pWin, int dx, int dy);
static Bool KdXVCloseScreen(ScreenPtr); static Bool KdXVCloseScreen(ScreenPtr);
@ -822,7 +822,7 @@ KdXVDestroyWindow(WindowPtr pWin)
} }
static void static void
KdXVWindowExposures(WindowPtr pWin, RegionPtr reg1, RegionPtr reg2) KdXVWindowExposures(WindowPtr pWin, RegionPtr reg1)
{ {
ScreenPtr pScreen = pWin->drawable.pScreen; ScreenPtr pScreen = pWin->drawable.pScreen;
KdXVScreenPtr ScreenPriv = GET_KDXV_SCREEN(pScreen); KdXVScreenPtr ScreenPriv = GET_KDXV_SCREEN(pScreen);
@ -834,7 +834,7 @@ KdXVWindowExposures(WindowPtr pWin, RegionPtr reg1, RegionPtr reg2)
AreasExposed = (WinPriv && reg1 && RegionNotEmpty(reg1)); AreasExposed = (WinPriv && reg1 && RegionNotEmpty(reg1));
pScreen->WindowExposures = ScreenPriv->WindowExposures; pScreen->WindowExposures = ScreenPriv->WindowExposures;
(*pScreen->WindowExposures) (pWin, reg1, reg2); (*pScreen->WindowExposures) (pWin, reg1);
pScreen->WindowExposures = KdXVWindowExposures; pScreen->WindowExposures = KdXVWindowExposures;
/* filter out XClearWindow/Area */ /* filter out XClearWindow/Area */

View File

@ -84,7 +84,7 @@ static int xf86XVQueryImageAttributes(XvPortPtr, XvImagePtr,
/* ScreenRec fields */ /* ScreenRec fields */
static Bool xf86XVDestroyWindow(WindowPtr pWin); static Bool xf86XVDestroyWindow(WindowPtr pWin);
static void xf86XVWindowExposures(WindowPtr pWin, RegionPtr r1, RegionPtr r2); static void xf86XVWindowExposures(WindowPtr pWin, RegionPtr r1);
static void xf86XVPostValidateTree(WindowPtr pWin, WindowPtr pLayerWin, static void xf86XVPostValidateTree(WindowPtr pWin, WindowPtr pLayerWin,
VTKind kind); VTKind kind);
static void xf86XVClipNotify(WindowPtr pWin, int dx, int dy); static void xf86XVClipNotify(WindowPtr pWin, int dx, int dy);
@ -1048,7 +1048,7 @@ xf86XVPostValidateTree(WindowPtr pWin, WindowPtr pLayerWin, VTKind kind)
} }
static void static void
xf86XVWindowExposures(WindowPtr pWin, RegionPtr reg1, RegionPtr reg2) xf86XVWindowExposures(WindowPtr pWin, RegionPtr reg1)
{ {
ScreenPtr pScreen = pWin->drawable.pScreen; ScreenPtr pScreen = pWin->drawable.pScreen;
XF86XVScreenPtr ScreenPriv = GET_XF86XV_SCREEN(pScreen); XF86XVScreenPtr ScreenPriv = GET_XF86XV_SCREEN(pScreen);
@ -1059,7 +1059,7 @@ xf86XVWindowExposures(WindowPtr pWin, RegionPtr reg1, RegionPtr reg2)
AreasExposed = (WinPriv && reg1 && RegionNotEmpty(reg1)); AreasExposed = (WinPriv && reg1 && RegionNotEmpty(reg1));
pScreen->WindowExposures = ScreenPriv->WindowExposures; pScreen->WindowExposures = ScreenPriv->WindowExposures;
(*pScreen->WindowExposures) (pWin, reg1, reg2); (*pScreen->WindowExposures) (pWin, reg1);
pScreen->WindowExposures = xf86XVWindowExposures; pScreen->WindowExposures = xf86XVWindowExposures;
/* filter out XClearWindow/Area */ /* filter out XClearWindow/Area */

View File

@ -1828,7 +1828,7 @@ DRIGetContextStore(DRIContextPrivPtr context)
} }
void void
DRIWindowExposures(WindowPtr pWin, RegionPtr prgn, RegionPtr bsreg) DRIWindowExposures(WindowPtr pWin, RegionPtr prgn)
{ {
ScreenPtr pScreen = pWin->drawable.pScreen; ScreenPtr pScreen = pWin->drawable.pScreen;
DRIScreenPrivPtr pDRIPriv = DRI_SCREEN_PRIV(pScreen); DRIScreenPrivPtr pDRIPriv = DRI_SCREEN_PRIV(pScreen);
@ -1846,7 +1846,7 @@ DRIWindowExposures(WindowPtr pWin, RegionPtr prgn, RegionPtr bsreg)
pScreen->WindowExposures = pDRIPriv->wrap.WindowExposures; pScreen->WindowExposures = pDRIPriv->wrap.WindowExposures;
/* call lower layers */ /* call lower layers */
(*pScreen->WindowExposures) (pWin, prgn, bsreg); (*pScreen->WindowExposures) (pWin, prgn);
/* rewrap */ /* rewrap */
pDRIPriv->wrap.WindowExposures = pScreen->WindowExposures; pDRIPriv->wrap.WindowExposures = pScreen->WindowExposures;

View File

@ -280,8 +280,7 @@ extern _X_EXPORT void DRISwapContext(int drmFD, void *oldctx, void *newctx);
extern _X_EXPORT void *DRIGetContextStore(DRIContextPrivPtr context); extern _X_EXPORT void *DRIGetContextStore(DRIContextPrivPtr context);
extern _X_EXPORT void DRIWindowExposures(WindowPtr pWin, extern _X_EXPORT void DRIWindowExposures(WindowPtr pWin, RegionPtr prgn);
RegionPtr prgn, RegionPtr bsreg);
extern _X_EXPORT Bool DRIDestroyWindow(WindowPtr pWin); extern _X_EXPORT Bool DRIDestroyWindow(WindowPtr pWin);

View File

@ -386,7 +386,7 @@ xnestWindowExposurePredicate(Display * dpy, XEvent * event, XPointer ptr)
} }
void void
xnestWindowExposures(WindowPtr pWin, RegionPtr pRgn, RegionPtr other_exposed) xnestWindowExposures(WindowPtr pWin, RegionPtr pRgn)
{ {
XEvent event; XEvent event;
Window window; Window window;
@ -410,7 +410,7 @@ xnestWindowExposures(WindowPtr pWin, RegionPtr pRgn, RegionPtr other_exposed)
XPutBackEvent(xnestDisplay, &event); XPutBackEvent(xnestDisplay, &event);
} }
miWindowExposures(pWin, pRgn, other_exposed); miWindowExposures(pWin, pRgn);
} }
void void

View File

@ -66,8 +66,7 @@ Bool xnestRealizeWindow(WindowPtr pWin);
Bool xnestUnrealizeWindow(WindowPtr pWin); Bool xnestUnrealizeWindow(WindowPtr pWin);
void xnestCopyWindow(WindowPtr pWin, xPoint oldOrigin, RegionPtr oldRegion); void xnestCopyWindow(WindowPtr pWin, xPoint oldOrigin, RegionPtr oldRegion);
void xnestClipNotify(WindowPtr pWin, int dx, int dy); void xnestClipNotify(WindowPtr pWin, int dx, int dy);
void xnestWindowExposures(WindowPtr pWin, RegionPtr pRgn, void xnestWindowExposures(WindowPtr pWin, RegionPtr pRgn);
RegionPtr other_exposed);
void xnestSetShape(WindowPtr pWin, int kind); void xnestSetShape(WindowPtr pWin, int kind);
void xnestShapeWindow(WindowPtr pWin); void xnestShapeWindow(WindowPtr pWin);

View File

@ -155,8 +155,7 @@ typedef void (*PostValidateTreeProcPtr) (WindowPtr /*pParent */ ,
VTKind /*kind */ ); VTKind /*kind */ );
typedef void (*WindowExposuresProcPtr) (WindowPtr /*pWindow */ , typedef void (*WindowExposuresProcPtr) (WindowPtr /*pWindow */ ,
RegionPtr /*prgn */ , RegionPtr /*prgn */);
RegionPtr /*other_exposed */ );
typedef void (*CopyWindowProcPtr) (WindowPtr /*pWindow */ , typedef void (*CopyWindowProcPtr) (WindowPtr /*pWindow */ ,
DDXPointRec /*ptOldOrg */ , DDXPointRec /*ptOldOrg */ ,

View File

@ -247,9 +247,7 @@ extern _X_EXPORT void miSendExposures(WindowPtr /*pWin */ ,
); );
extern _X_EXPORT void miWindowExposures(WindowPtr /*pWin */ , extern _X_EXPORT void miWindowExposures(WindowPtr /*pWin */ ,
RegionPtr /*prgn */ , RegionPtr /*prgn */);
RegionPtr /*other_exposed */
);
extern _X_EXPORT void miPaintWindow(WindowPtr /*pWin */ , extern _X_EXPORT void miPaintWindow(WindowPtr /*pWin */ ,
RegionPtr /*prgn */ , RegionPtr /*prgn */ ,

View File

@ -421,12 +421,11 @@ miSendExposures(WindowPtr pWin, RegionPtr pRgn, int dx, int dy)
} }
void void
miWindowExposures(WindowPtr pWin, RegionPtr prgn, RegionPtr other_exposed) miWindowExposures(WindowPtr pWin, RegionPtr prgn)
{ {
RegionPtr exposures = prgn; RegionPtr exposures = prgn;
if ((prgn && !RegionNil(prgn)) || if ((prgn && !RegionNil(prgn)) || (exposures && !RegionNil(exposures))) {
(exposures && !RegionNil(exposures)) || other_exposed) {
RegionRec expRec; RegionRec expRec;
int clientInterested; int clientInterested;
@ -435,14 +434,6 @@ miWindowExposures(WindowPtr pWin, RegionPtr prgn, RegionPtr other_exposed)
*/ */
clientInterested = clientInterested =
(pWin->eventMask | wOtherEventMasks(pWin)) & ExposureMask; (pWin->eventMask | wOtherEventMasks(pWin)) & ExposureMask;
if (other_exposed) {
if (exposures) {
RegionUnion(other_exposed, exposures, other_exposed);
if (exposures != prgn)
RegionDestroy(exposures);
}
exposures = other_exposed;
}
if (clientInterested && exposures && if (clientInterested && exposures &&
(RegionNumRects(exposures) > RECTLIMIT)) { (RegionNumRects(exposures) > RECTLIMIT)) {
/* /*
@ -474,7 +465,7 @@ miWindowExposures(WindowPtr pWin, RegionPtr prgn, RegionPtr other_exposed)
if (exposures == &expRec) { if (exposures == &expRec) {
RegionUninit(exposures); RegionUninit(exposures);
} }
else if (exposures && exposures != prgn && exposures != other_exposed) else if (exposures && exposures != prgn)
RegionDestroy(exposures); RegionDestroy(exposures);
if (prgn) if (prgn)
RegionEmpty(prgn); RegionEmpty(prgn);

View File

@ -79,7 +79,7 @@ static void miOverlayMarkUnrealizedWindow(WindowPtr, WindowPtr, Bool);
static int miOverlayValidateTree(WindowPtr, WindowPtr, VTKind); static int miOverlayValidateTree(WindowPtr, WindowPtr, VTKind);
static void miOverlayHandleExposures(WindowPtr); static void miOverlayHandleExposures(WindowPtr);
static void miOverlayMoveWindow(WindowPtr, int, int, WindowPtr, VTKind); static void miOverlayMoveWindow(WindowPtr, int, int, WindowPtr, VTKind);
static void miOverlayWindowExposures(WindowPtr, RegionPtr, RegionPtr); static void miOverlayWindowExposures(WindowPtr, RegionPtr);
static void miOverlayResizeWindow(WindowPtr, int, int, unsigned int, static void miOverlayResizeWindow(WindowPtr, int, int, unsigned int,
unsigned int, WindowPtr); unsigned int, WindowPtr);
static void miOverlayClearToBackground(WindowPtr, int, int, int, int, Bool); static void miOverlayClearToBackground(WindowPtr, int, int, int, int, Bool);
@ -827,7 +827,7 @@ miOverlayHandleExposures(WindowPtr pWin)
miOverlayScreenPtr pPriv = MIOVERLAY_GET_SCREEN_PRIVATE(pScreen); miOverlayScreenPtr pPriv = MIOVERLAY_GET_SCREEN_PRIVATE(pScreen);
WindowPtr pChild; WindowPtr pChild;
ValidatePtr val; ValidatePtr val;
void (*WindowExposures) (WindowPtr, RegionPtr, RegionPtr); WindowExposuresProcPtr WindowExposures;
WindowExposures = pWin->drawable.pScreen->WindowExposures; WindowExposures = pWin->drawable.pScreen->WindowExposures;
if (pPriv->underlayMarked) { if (pPriv->underlayMarked) {
@ -849,8 +849,7 @@ miOverlayHandleExposures(WindowPtr pWin)
} }
RegionUninit(&mival->borderExposed); RegionUninit(&mival->borderExposed);
(*WindowExposures) (pTree->pWin, &mival->exposed, (*WindowExposures) (pTree->pWin, &mival->exposed);
NullRegion);
RegionUninit(&mival->exposed); RegionUninit(&mival->exposed);
} }
free(mival); free(mival);
@ -886,7 +885,7 @@ miOverlayHandleExposures(WindowPtr pWin)
if (RegionNotEmpty(&val->after.borderExposed)) { if (RegionNotEmpty(&val->after.borderExposed)) {
miPaintWindow(pChild, &val->after.borderExposed, PW_BORDER); miPaintWindow(pChild, &val->after.borderExposed, PW_BORDER);
} }
(*WindowExposures) (pChild, &val->after.exposed, NullRegion); (*WindowExposures) (pChild, &val->after.exposed);
} }
RegionUninit(&val->after.borderExposed); RegionUninit(&val->after.borderExposed);
RegionUninit(&val->after.exposed); RegionUninit(&val->after.exposed);
@ -980,26 +979,16 @@ miOverlayMoveWindow(WindowPtr pWin,
#endif #endif
static void static void
miOverlayWindowExposures(WindowPtr pWin, miOverlayWindowExposures(WindowPtr pWin, RegionPtr prgn)
RegionPtr prgn, RegionPtr other_exposed)
{ {
RegionPtr exposures = prgn; RegionPtr exposures = prgn;
if ((prgn && !RegionNil(prgn)) || if ((prgn && !RegionNil(prgn)) || (exposures && !RegionNil(exposures))) {
(exposures && !RegionNil(exposures)) || other_exposed) {
RegionRec expRec; RegionRec expRec;
int clientInterested; int clientInterested;
clientInterested = (pWin->eventMask | wOtherEventMasks(pWin)) & clientInterested = (pWin->eventMask | wOtherEventMasks(pWin)) &
ExposureMask; ExposureMask;
if (other_exposed) {
if (exposures) {
RegionUnion(other_exposed, exposures, other_exposed);
if (exposures != prgn)
RegionDestroy(exposures);
}
exposures = other_exposed;
}
if (clientInterested && exposures && if (clientInterested && exposures &&
(RegionNumRects(exposures) > RECTLIMIT)) { (RegionNumRects(exposures) > RECTLIMIT)) {
ScreenPtr pScreen = pWin->drawable.pScreen; ScreenPtr pScreen = pWin->drawable.pScreen;
@ -1035,7 +1024,7 @@ miOverlayWindowExposures(WindowPtr pWin,
if (exposures == &expRec) { if (exposures == &expRec) {
RegionUninit(exposures); RegionUninit(exposures);
} }
else if (exposures && exposures != prgn && exposures != other_exposed) else if (exposures && exposures != prgn)
RegionDestroy(exposures); RegionDestroy(exposures);
if (prgn) if (prgn)
RegionEmpty(prgn); RegionEmpty(prgn);
@ -1592,7 +1581,6 @@ miOverlayClearToBackground(WindowPtr pWin,
miOverlayTreePtr pTree = MIOVERLAY_GET_WINDOW_TREE(pWin); miOverlayTreePtr pTree = MIOVERLAY_GET_WINDOW_TREE(pWin);
BoxRec box; BoxRec box;
RegionRec reg; RegionRec reg;
RegionPtr pBSReg = NullRegion;
ScreenPtr pScreen = pWin->drawable.pScreen; ScreenPtr pScreen = pWin->drawable.pScreen;
miOverlayScreenPtr pScreenPriv = MIOVERLAY_GET_SCREEN_PRIVATE(pScreen); miOverlayScreenPtr pScreenPriv = MIOVERLAY_GET_SCREEN_PRIVATE(pScreen);
RegionPtr clipList; RegionPtr clipList;
@ -1636,12 +1624,10 @@ miOverlayClearToBackground(WindowPtr pWin,
RegionIntersect(&reg, &reg, clipList); RegionIntersect(&reg, &reg, clipList);
if (generateExposures) if (generateExposures)
(*pScreen->WindowExposures) (pWin, &reg, pBSReg); (*pScreen->WindowExposures) (pWin, &reg);
else if (pWin->backgroundState != None) else if (pWin->backgroundState != None)
miPaintWindow(pWin, &reg, PW_BACKGROUND); miPaintWindow(pWin, &reg, PW_BACKGROUND);
RegionUninit(&reg); RegionUninit(&reg);
if (pBSReg)
RegionDestroy(pBSReg);
} }
/****************************************************************/ /****************************************************************/

View File

@ -111,7 +111,7 @@ miClearToBackground(WindowPtr pWin,
RegionIntersect(&reg, &reg, &pWin->clipList); RegionIntersect(&reg, &reg, &pWin->clipList);
if (generateExposures) if (generateExposures)
(*pWin->drawable.pScreen->WindowExposures) (pWin, &reg, NULL); (*pWin->drawable.pScreen->WindowExposures) (pWin, &reg);
else if (pWin->backgroundState != None) else if (pWin->backgroundState != None)
miPaintWindow(pWin, &reg, PW_BACKGROUND); miPaintWindow(pWin, &reg, PW_BACKGROUND);
RegionUninit(&reg); RegionUninit(&reg);
@ -221,7 +221,7 @@ miHandleValidateExposures(WindowPtr pWin)
if (RegionNotEmpty(&val->after.borderExposed)) if (RegionNotEmpty(&val->after.borderExposed))
miPaintWindow(pChild, &val->after.borderExposed, PW_BORDER); miPaintWindow(pChild, &val->after.borderExposed, PW_BORDER);
RegionUninit(&val->after.borderExposed); RegionUninit(&val->after.borderExposed);
(*WindowExposures) (pChild, &val->after.exposed, NullRegion); (*WindowExposures) (pChild, &val->after.exposed);
RegionUninit(&val->after.exposed); RegionUninit(&val->after.exposed);
free(val); free(val);
pChild->valdata = NULL; pChild->valdata = NULL;