From 0f1fa85fe03a268c2b3b04978f3a533df1bf3414 Mon Sep 17 00:00:00 2001 From: Alan Coopersmith Date: Fri, 11 Jul 2014 10:34:08 -0700 Subject: Use C99 named initializers to fill in events passed to XSendEvent Forces compiler to zero-fill unset fields in the struct (fixing bug 81236) and allows optimizer to order field initialization to best fit cache layout or other considerations. Before & after output of gcc -S on AMD64 shows insertion of "rep stosq" instructions to rapidly zero-fill structs. Signed-off-by: Alan Coopersmith Reviewed-by: Matthieu Herrb Backported-to-NX-by: Ulrich Sibiller --- nx-X11/lib/X11/ReconfWM.c | 37 ++++++++++++++++++++----------------- 1 file changed, 20 insertions(+), 17 deletions(-) (limited to 'nx-X11/lib/X11/ReconfWM.c') diff --git a/nx-X11/lib/X11/ReconfWM.c b/nx-X11/lib/X11/ReconfWM.c index 1776f2e15..8dc3534e0 100644 --- a/nx-X11/lib/X11/ReconfWM.c +++ b/nx-X11/lib/X11/ReconfWM.c @@ -41,7 +41,6 @@ Status XReconfigureWMWindow ( unsigned int mask, XWindowChanges *changes) { - XConfigureRequestEvent ev; Window root = RootWindow (dpy, screen); _XAsyncHandler async; _XAsyncErrorState async_state; @@ -120,20 +119,24 @@ Status XReconfigureWMWindow ( /* * If the request succeeded, then everything is okay; otherwise, send event */ - if (!async_state.error_count) return True; - - ev.type = ConfigureRequest; - ev.window = w; - ev.parent = root; - ev.value_mask = (mask & AllMaskBits); - ev.x = changes->x; - ev.y = changes->y; - ev.width = changes->width; - ev.height = changes->height; - ev.border_width = changes->border_width; - ev.above = changes->sibling; - ev.detail = changes->stack_mode; - return (XSendEvent (dpy, root, False, - SubstructureRedirectMask|SubstructureNotifyMask, - (XEvent *)&ev)); + if (!async_state.error_count) + return True; + else { + XConfigureRequestEvent ev = { + .type = ConfigureRequest, + .window = w, + .parent = root, + .value_mask = (mask & AllMaskBits), + .x = changes->x, + .y = changes->y, + .width = changes->width, + .height = changes->height, + .border_width = changes->border_width, + .above = changes->sibling, + .detail = changes->stack_mode, + }; + return (XSendEvent (dpy, root, False, + SubstructureRedirectMask|SubstructureNotifyMask, + (XEvent *)&ev)); + } } -- cgit v1.2.3