xserver: Branch 'master' - 5 commits

Keith Packard keithp at kemper.freedesktop.org
Tue Mar 25 16:02:44 PDT 2014


 hw/dmx/dmxinit.c                   |    4 ---
 hw/kdrive/ephyr/ephyrinit.c        |    5 ---
 hw/vfb/InitOutput.c                |    5 ---
 hw/xfree86/common/xf86Extensions.c |    5 ---
 hw/xfree86/dixmods/glxmodule.c     |    8 ++----
 hw/xfree86/doc/ddxDesign.xml       |    4 +--
 hw/xquartz/quartz.c                |    5 ---
 hw/xwin/InitOutput.c               |    5 ---
 include/extension.h                |    3 +-
 mi/miinitext.c                     |   48 ++++++++++++++++++-------------------
 10 files changed, 37 insertions(+), 55 deletions(-)

New commits:
commit e46820fb897600800b5f3297a59039556774e9c5
Author: Emil Velikov <emil.l.velikov at gmail.com>
Date:   Thu Sep 26 20:28:37 2013 +0100

    miinitext: introduce LoadExtensionList() to replace over LoadExtension()
    
    Looping around LoadExtension() meant that ExtensionModuleList was reallocated
    on every extension. Using LoadExtensionList() we pass an array thus the
    function can do the reallocation in one go, and then loop and setup the
    ExtensionModuleList.
    
    Signed-off-by: Emil Velikov <emil.l.velikov at gmail.com>
    Reviewed-by: Keith Packard <keithp at keithp.com>
    
    v2: Update ephyr [Keith Packard]
    v3: Eliminate const warnings in LoadExtensionList [Keith Packard]
    
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/hw/dmx/dmxinit.c b/hw/dmx/dmxinit.c
index 7adcba0..fd2ade0 100644
--- a/hw/dmx/dmxinit.c
+++ b/hw/dmx/dmxinit.c
@@ -597,10 +597,8 @@ static void dmxAddExtensions(Bool glxSupported)
         { GlxExtensionInit, "GLX", &glxSupported },
 #endif
     };
-    int i;
 
-    for (i = 0; i < ARRAY_SIZE(dmxExtensions); i++)
-        LoadExtension(&dmxExtensions[i], TRUE);
+    LoadExtensionList(dmxExtensions, ARRAY_SIZE(dmxExtensions), TRUE);
 }
 
 /** This routine is called in Xserver/dix/main.c from \a main(). */
diff --git a/hw/kdrive/ephyr/ephyrinit.c b/hw/kdrive/ephyr/ephyrinit.c
index 807e717..fac84cd 100644
--- a/hw/kdrive/ephyr/ephyrinit.c
+++ b/hw/kdrive/ephyr/ephyrinit.c
@@ -65,10 +65,7 @@ static const ExtensionModule ephyrExtensions[] = {
 static
 void ephyrExtensionInit(void)
 {
- int i;
-
- for (i = 0; i < ARRAY_SIZE(ephyrExtensions); i++)
- LoadExtension(&ephyrExtensions[i], TRUE);
+    LoadExtensionList(ephyrExtensions, ARRAY_SIZE(ephyrExtensions), TRUE);
 }
 
 
diff --git a/hw/vfb/InitOutput.c b/hw/vfb/InitOutput.c
index 2175ac6..9c49264 100644
--- a/hw/vfb/InitOutput.c
+++ b/hw/vfb/InitOutput.c
@@ -892,10 +892,7 @@ static const ExtensionModule vfbExtensions[] = {
 static
 void vfbExtensionInit(void)
 {
-    int i;
-
-    for (i = 0; i < ARRAY_SIZE(vfbExtensions); i++)
-        LoadExtension(&vfbExtensions[i], TRUE);
+    LoadExtensionList(vfbExtensions, ARRAY_SIZE(vfbExtensions), TRUE);
 }
 
 void
diff --git a/hw/xfree86/common/xf86Extensions.c b/hw/xfree86/common/xf86Extensions.c
index c80de34..25b2bc3 100644
--- a/hw/xfree86/common/xf86Extensions.c
+++ b/hw/xfree86/common/xf86Extensions.c
@@ -132,10 +132,7 @@ load_extension_config(void)
 void
 xf86ExtensionInit(void)
 {
-    int i;
-
     load_extension_config();
 
-    for (i = 0; i < ARRAY_SIZE(extensionModules); i++)
-	LoadExtension(&extensionModules[i], TRUE);
+    LoadExtensionList(extensionModules, ARRAY_SIZE(extensionModules), TRUE);
 }
diff --git a/hw/xfree86/dixmods/glxmodule.c b/hw/xfree86/dixmods/glxmodule.c
index bf7d182..d53c665 100644
--- a/hw/xfree86/dixmods/glxmodule.c
+++ b/hw/xfree86/dixmods/glxmodule.c
@@ -47,10 +47,8 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 static MODULESETUPPROTO(glxSetup);
 
-static const ExtensionModule GLXExt = {
-    GlxExtensionInit,
-    "GLX",
-    &noGlxExtension
+static const ExtensionModule GLXExt[] = {
+    { GlxExtensionInit, "GLX", &noGlxExtension },
 };
 
 static XF86ModuleVersionInfo VersRec = {
@@ -90,7 +88,7 @@ glxSetup(void *module, void *opts, int *errmaj, int *errmin)
             GlxPushProvider(provider);
     }
 
-    LoadExtension(&GLXExt, FALSE);
+    LoadExtensionList(GLXExt, ARRAY_SIZE(GLXExt), FALSE);
 
     return module;
 }
diff --git a/hw/xfree86/doc/ddxDesign.xml b/hw/xfree86/doc/ddxDesign.xml
index 7c2c20f..d1fd9af 100644
--- a/hw/xfree86/doc/ddxDesign.xml
+++ b/hw/xfree86/doc/ddxDesign.xml
@@ -5920,10 +5920,10 @@ These may be moved out of the loader at some point.
 
       <blockquote><para>
 	  <programlisting>
-    void LoadExtension(ExtensionModule *ext);
+    void LoadExtensionList(const ExtensionModule ext[]);
 	  </programlisting>
 	  <blockquote><para>
-    This registers the entry points for the extension identified by
+    This registers the entry points for the extension array identified by
     <parameter>ext</parameter>.  The <structname>ExtensionModule</structname> struct is
     defined as:
 
diff --git a/hw/xquartz/quartz.c b/hw/xquartz/quartz.c
index bc6c8d0..d7229ce 100644
--- a/hw/xquartz/quartz.c
+++ b/hw/xquartz/quartz.c
@@ -164,10 +164,7 @@ static const ExtensionModule quartzExtensions[] = {
  */
 static void QuartzExtensionInit(void)
 {
-    int i;
-
-    for (i = 0; i < ARRAY_SIZE(quartzExtensions); i++)
-        LoadExtension(&quartzExtensions[i], TRUE);
+    LoadExtensionList(quartzExtensions, ARRAY_SIZE(quartzExtensions), TRUE);
 }
 
 /*
diff --git a/hw/xwin/InitOutput.c b/hw/xwin/InitOutput.c
index b3ff7c0..6b5c38d 100644
--- a/hw/xwin/InitOutput.c
+++ b/hw/xwin/InitOutput.c
@@ -163,8 +163,6 @@ static const ExtensionModule xwinExtensions[] = {
 static
 void XwinExtensionInit(void)
 {
-    int i;
-
 #ifdef XWIN_GLX_WINDOWS
     if (g_fNativeGl) {
         /* install the native GL provider */
@@ -172,8 +170,7 @@ void XwinExtensionInit(void)
     }
 #endif
 
-    for (i = 0; i < ARRAY_SIZE(xwinExtensions); i++)
-        LoadExtension(&xwinExtensions[i], TRUE);
+    LoadExtensionList(xwinExtensions, ARRAY_SIZE(xwinExtensions), TRUE);
 }
 
 #if defined(DDXBEFORERESET)
diff --git a/include/extension.h b/include/extension.h
index acc6add..7c09af1 100644
--- a/include/extension.h
+++ b/include/extension.h
@@ -97,6 +97,7 @@ extern _X_EXPORT void InitExtensions(int argc, char **argv);
 
 extern _X_EXPORT void CloseDownExtensions(void);
 
-extern _X_EXPORT void LoadExtension(const ExtensionModule *ext, Bool external);
+extern _X_EXPORT void LoadExtensionList(const ExtensionModule ext[],
+                                        int listSize, Bool external);
 
 #endif                          /* EXTENSION_H */
diff --git a/mi/miinitext.c b/mi/miinitext.c
index b136818..5b45ab4 100644
--- a/mi/miinitext.c
+++ b/mi/miinitext.c
@@ -312,15 +312,13 @@ static void
 AddStaticExtensions(void)
 {
     static Bool listInitialised = FALSE;
-    int i;
 
     if (listInitialised)
         return;
     listInitialised = TRUE;
 
     /* Add built-in extensions to the list. */
-    for (i = 0; i < ARRAY_SIZE(staticExtensions); i++)
-        LoadExtension(&staticExtensions[i], TRUE);
+    LoadExtensionList(staticExtensions, ARRAY_SIZE(staticExtensions), TRUE);
 }
 
 void
@@ -341,7 +339,7 @@ InitExtensions(int argc, char *argv[])
 }
 
 static ExtensionModule *
-NewExtensionModule(void)
+NewExtensionModuleList(int size)
 {
     ExtensionModule *save = ExtensionModuleList;
     int n;
@@ -350,7 +348,7 @@ NewExtensionModule(void)
     if (!ExtensionModuleList)
         numExtensionModules = 0;
 
-    n = numExtensionModules + 1;
+    n = numExtensionModules + size;
     ExtensionModuleList = realloc(ExtensionModuleList,
                                   n * sizeof(ExtensionModule));
     if (ExtensionModuleList == NULL) {
@@ -358,29 +356,35 @@ NewExtensionModule(void)
         return NULL;
     }
     else {
-        numExtensionModules++;
-        return ExtensionModuleList + (numExtensionModules - 1);
+        numExtensionModules += size;
+        return ExtensionModuleList + (numExtensionModules - size);
     }
 }
 
 void
-LoadExtension(const ExtensionModule * e, Bool builtin)
+LoadExtensionList(const ExtensionModule ext[], int size, Bool builtin)
 {
     ExtensionModule *newext;
+    const char *msg;
+    int i;
 
     /* Make sure built-in extensions get added to the list before those
      * in modules. */
     AddStaticExtensions();
 
-    if (!(newext = NewExtensionModule()))
+    if (!(newext = NewExtensionModuleList(size)))
         return;
 
     if (builtin)
-        ErrorF("Initializing built-in extension %s\n", e->name);
+        msg = "Initializing built-in";
     else
-        ErrorF("Loading extension %s\n", e->name);
+        msg = "Loading";
 
-    newext->name = e->name;
-    newext->initFunc = e->initFunc;
-    newext->disablePtr = e->disablePtr;
+    for (i = 0; i < size; i++, newext++) {
+        ErrorF("%s extension %s\n", msg, ext[i].name);
+
+        newext->name = ext[i].name;
+        newext->initFunc = ext[i].initFunc;
+        newext->disablePtr = ext[i].disablePtr;
+    }
 }
commit d415b9d69fdaab4ce3fc05d3d26b2d8413403aa4
Author: Emil Velikov <emil.l.velikov at gmail.com>
Date:   Thu Sep 26 20:16:31 2013 +0100

    miinitext: avoid allocating a sentinel ExtensionModule
    
    With all the logic now in place there is no need to allocate a separate
    ExtensionModule to be used as a sentinel.
    
    Signed-off-by: Emil Velikov <emil.l.velikov at gmail.com>
    Reviewed-by: Keith Packard <keithp at keithp.com>
    Reviewed-by: Adam Jackson <ajax at redhat.com>

diff --git a/mi/miinitext.c b/mi/miinitext.c
index ce2e4bc..b136818 100644
--- a/mi/miinitext.c
+++ b/mi/miinitext.c
@@ -331,7 +331,7 @@ InitExtensions(int argc, char *argv[])
 
     AddStaticExtensions();
 
-    for (i = 0; ExtensionModuleList[i].name != NULL; i++) {
+    for (i = 0; i < numExtensionModules; i++) {
         ext = &ExtensionModuleList[i];
         if (ext->initFunc != NULL &&
             (ext->disablePtr == NULL || !*ext->disablePtr)) {
@@ -352,14 +352,13 @@ NewExtensionModule(void)
 
     n = numExtensionModules + 1;
     ExtensionModuleList = realloc(ExtensionModuleList,
-                                  (n + 1) * sizeof(ExtensionModule));
+                                  n * sizeof(ExtensionModule));
     if (ExtensionModuleList == NULL) {
         ExtensionModuleList = save;
         return NULL;
     }
     else {
         numExtensionModules++;
-        ExtensionModuleList[numExtensionModules].name = NULL;
         return ExtensionModuleList + (numExtensionModules - 1);
     }
 }
commit b421ac8e026f464fdba2082aaedc00c19fb8b6c7
Author: Emil Velikov <emil.l.velikov at gmail.com>
Date:   Thu Sep 26 20:11:40 2013 +0100

    miinitext: constify staticExtensions
    
    The array is readonly and should not be tampered with.
    
    Signed-off-by: Emil Velikov <emil.l.velikov at gmail.com>
    Reviewed-by: Keith Packard <keithp at keithp.com>

diff --git a/mi/miinitext.c b/mi/miinitext.c
index 099ac42..ce2e4bc 100644
--- a/mi/miinitext.c
+++ b/mi/miinitext.c
@@ -234,7 +234,7 @@ EnableDisableExtensionError(const char *name, Bool enable)
 }
 
 /* List of built-in (statically linked) extensions */
-static ExtensionModule staticExtensions[] = {
+static const ExtensionModule staticExtensions[] = {
     {GEExtensionInit, "Generic Event Extension", &noGEExtension},
     {ShapeExtensionInit, "SHAPE", NULL},
 #ifdef MITSHM
commit 5ff34b5a0b3b333bf0f0334717cc8630cc785510
Author: Emil Velikov <emil.l.velikov at gmail.com>
Date:   Thu Sep 26 20:08:56 2013 +0100

    miinitext: drop sentinel detection during LoadExtension
    
    All the sentinels from the extension lists were removed, thus the only
    case were this would trigger is when the code is broken badly.
    
    Signed-off-by: Emil Velikov <emil.l.velikov at gmail.com>
    Reviewed-by: Keith Packard <keithp at keithp.com>

diff --git a/mi/miinitext.c b/mi/miinitext.c
index 9d5125e..099ac42 100644
--- a/mi/miinitext.c
+++ b/mi/miinitext.c
@@ -369,9 +369,6 @@ LoadExtension(const ExtensionModule * e, Bool builtin)
 {
     ExtensionModule *newext;
 
-    if (e == NULL || e->name == NULL)
-        return;
-
     /* Make sure built-in extensions get added to the list before those
      * in modules. */
     AddStaticExtensions();
commit 6fea450d41a03d32c10c7da162dfaadd8ead4ece
Author: Emil Velikov <emil.l.velikov at gmail.com>
Date:   Thu Sep 26 20:08:16 2013 +0100

    miinitext: move AddStaticExtensions() to LoadExtension()
    
    Separate the function from NewExtensionModule() as the former does
    only memory reallocation. No functional change.
    
    Signed-off-by: Emil Velikov <emil.l.velikov at gmail.com>
    Reviewed-by: Keith Packard <keithp at keithp.com>

diff --git a/mi/miinitext.c b/mi/miinitext.c
index 67511b8..9d5125e 100644
--- a/mi/miinitext.c
+++ b/mi/miinitext.c
@@ -346,10 +346,6 @@ NewExtensionModule(void)
     ExtensionModule *save = ExtensionModuleList;
     int n;
 
-    /* Make sure built-in extensions get added to the list before those
-     * in modules. */
-    AddStaticExtensions();
-
     /* Sanity check */
     if (!ExtensionModuleList)
         numExtensionModules = 0;
@@ -376,6 +372,10 @@ LoadExtension(const ExtensionModule * e, Bool builtin)
     if (e == NULL || e->name == NULL)
         return;
 
+    /* Make sure built-in extensions get added to the list before those
+     * in modules. */
+    AddStaticExtensions();
+
     if (!(newext = NewExtensionModule()))
         return;
 


More information about the xorg-commit mailing list