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 considertations.

Before & after output of gcc -S on AMD64 shows insertion of "rep stosq"
instructions to rapidly zero-fill structs.

Signed-off-by: Alan Coopersmith <alan.coopersm...@oracle.com>
---
 src/Iconify.c  |   26 +++++++++++++++-----------
 src/ReconfWM.c |   37 ++++++++++++++++++++-----------------
 src/Withdraw.c |   22 ++++++++++++----------
 3 files changed, 47 insertions(+), 38 deletions(-)

diff --git a/src/Iconify.c b/src/Iconify.c
index 3a969d7..9da4165 100644
--- a/src/Iconify.c
+++ b/src/Iconify.c
@@ -67,19 +67,23 @@ Status XIconifyWindow (
     Window w,
     int screen)
 {
-    XClientMessageEvent ev;
-    Window root = RootWindow (dpy, screen);
     Atom prop;
 
     prop = XInternAtom (dpy, "WM_CHANGE_STATE", False);
-    if (prop == None) return False;
+    if (prop == None)
+        return False;
+    else {
+        XClientMessageEvent ev = {
+            .type = ClientMessage,
+            .window = w,
+            .message_type = prop,
+            .format = 32,
+            .data.l[0] = IconicState
+        };
+        Window root = RootWindow (dpy, screen);
 
-    ev.type = ClientMessage;
-    ev.window = w;
-    ev.message_type = prop;
-    ev.format = 32;
-    ev.data.l[0] = IconicState;
-    return (XSendEvent (dpy, root, False,
-                       SubstructureRedirectMask|SubstructureNotifyMask,
-                       (XEvent *)&ev));
+        return (XSendEvent (dpy, root, False,
+                            SubstructureRedirectMask|SubstructureNotifyMask,
+                            (XEvent *)&ev));
+    }
 }
diff --git a/src/ReconfWM.c b/src/ReconfWM.c
index 1776f2e..8dc3534 100644
--- a/src/ReconfWM.c
+++ b/src/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));
+    }
 }
diff --git a/src/Withdraw.c b/src/Withdraw.c
index ac15ddc..1015f5b 100644
--- a/src/Withdraw.c
+++ b/src/Withdraw.c
@@ -67,16 +67,18 @@ Status XWithdrawWindow (
     Window w,
     int screen)
 {
-    XUnmapEvent ev;
-    Window root = RootWindow (dpy, screen);
-
     XUnmapWindow (dpy, w);
 
-    ev.type = UnmapNotify;
-    ev.event = root;
-    ev.window = w;
-    ev.from_configure = False;
-    return (XSendEvent (dpy, root, False,
-                       SubstructureRedirectMask|SubstructureNotifyMask,
-                       (XEvent *)&ev));
+    {
+        Window root = RootWindow (dpy, screen);
+        XUnmapEvent ev = {
+            .type = UnmapNotify,
+            .event = root,
+            .window = w,
+            .from_configure = False
+        };
+        return (XSendEvent (dpy, root, False,
+                            SubstructureRedirectMask|SubstructureNotifyMask,
+                            (XEvent *)&ev));
+    }
 }
-- 
1.7.9.2

_______________________________________________
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to