On 07/12/2014 06:22 AM, Alan Coopersmith wrote:
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>

Reviewed-by: Matthieu Herrb <matth...@herrb.eu>

---
  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));
+    }
  }


_______________________________________________
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